Esta es una pregunta realmente popular aquí en SO, pero ninguna de las muchas respuestas que he visto explica claramente qué significa realmente este error y por qué ocurre.
Una fuente de confusión es que cuando (por ejemplo) haces pip install pycparser , primero obtienes el error:
Failed building wheel for pycparser
que luego es seguido por el mensaje de que el paquete era:
Successfully installed pycparser-2.19 .
# pip3 install pycparser Collecting pycparser Using cached https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz Building wheels for collected packages: pycparser Running setup.py bdist_wheel for pycparser ... error Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-g_v28hpp/pycparser/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-__w_f6p0 --python-tag cp36: Traceback (most recent call last): File "<string>", line 1, in <module> ... File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2349, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) ModuleNotFoundError: No module named 'wheel.bdist_wheel' ---------------------------------------- Failed building wheel for pycparser Running setup.py clean for pycparser Failed to build pycparser Installing collected packages: pycparser Running setup.py install for pycparser ... done Successfully installed pycparser-2.19¿Que esta pasando aqui?
(Me gustaría entender cómo algo puede fallar pero aún así instalarse y si puede confiar en que este paquete funcione correctamente).
Hasta ahora, la mejor explicación parcial que he encontrado es esta .
(mantenedor de pip aquí!)
Si el paquete no es una rueda, pip intenta construir una rueda para él (a través setup.py bdist_wheel ). Si eso falla por alguna razón (como, bibliotecas de nivel de sistema faltantes, incompatibilidades con su sistema, cadena de versión incorrecta en la rueda construida, etc.), obtendrá el mensaje "Rueda de construcción fallida para {...}".
En algunos de estos casos, actualmente, pip recurre a la instalación a través de setup.py install , por lo que es posible que la instalación aún tenga éxito. Dicho esto, pip siempre intenta instalar paquetes a través de ruedas con la mayor frecuencia posible. Esto se debe a las diversas ventajas de usar ruedas (como instalaciones más rápidas, almacenamiento en caché, no volver a ejecutar el código, etc.) y al hecho de que es un formato estandarizado; a diferencia de la interfaz de instalación setup.py (obsoleta).
Su mensaje de error aquí se debe a que falta el paquete de wheel , que contiene la lógica requerida para construir las ruedas en setup.py bdist_wheel . ( pip install wheel puede solucionarlo, pero no solucionará ningún problema de tiempo de compilación debido a la configuración del sistema)
En algún momento en el futuro, cambiaremos a un sistema de compilación más moderno de forma predeterminada (si es el autor de un paquete, puede optar por agregar un pyproject.toml ) que resolverá este problema, a través de entornos de compilación aislados donde tendrá la rueda instalada. :)
Ayer, recibí el mismo error: Failed building wheel for hddfancontrol cuando ejecuté pip3 install hddfancontrol . El resultado fue Failed to build hddfancontrol . La causa fue error: invalid command 'bdist_wheel' y Running setup.py bdist_wheel for hddfancontrol ... error . El error se solucionó ejecutando lo siguiente:
pip3 install wheel(Desde aquí .)
Alternativamente, la "rueda" se puede descargar directamente desde aquí . Una vez descargado, se puede instalar ejecutando lo siguiente:
pip3 install "/the/file_path/to/wheel-0.32.3-py2.py3-none-any.whl"Ya que nadie parece mencionar esto aparte de mí. Mi propia solución al problema anterior es, con mayor frecuencia, asegurarme de deshabilitar la copia en caché usando: pip install <package> --no-cache-dir .