What is the meaning of "Failed building wheel for X" in pip install?
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Underwater World
--
Chapters
00:00 What Is The Meaning Of &Quot;Failed Building Wheel For X&Quot; In Pip Install?
01:10 Answer 1 Score 74
01:44 Answer 2 Score 6
02:53 Answer 3 Score 228
04:27 Accepted Answer Score 63
04:41 Thank you
--
Full question
https://stackoverflow.com/questions/5320...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #python3x #pip #pythonwheel
#avk47
ANSWER 1
Score 228
(pip maintainer here!)
Update: This is no longer necessary starting Python 3.12, where pip will automatically use isolated builds in new virtual environments.
For a quick copy paste:
pip install wheel
Do that in every new virtual environment created with venv.
Read on for the details and explaination.
If the package is not a wheel, pip tries to build a wheel for it (via setup.py bdist_wheel). If that fails for any reason (like, missing system level libraries, incompatibilities with your system, bad version string in the built wheel, etc), you get the "Failed building wheel for {...}" message.
In some of these cases, currently, pip falls back to installing via setup.py install, so it's possible that the installation still succeeds. That said, pip always tries to install packages via wheels as often as it can. This is because of various advantages of using wheels (like faster installs, cache-able, not executing code again etc) and the fact that it is a standardizd format; unlike the (deprecated) setup.py install interface.
Your error message here is due to the wheel package being missing, which contains the logic required to build the wheels in setup.py bdist_wheel. (pip install wheel can fix that -- but it won't fix any build time issues due to system configuration)
Sometime in the future, we'll switch to a more modern build system by default (if you're a package author, you can opt-in by adding a pyproject.toml) that will solve this issue, through isolated build environments where you will have wheel installed. :)
- PEP 517: A build-system independent format for source trees
 - A blog post on "PEP 517 and 518 in Plain English"
 
ANSWER 2
Score 74
Yesterday, I got the same error:  Failed building wheel for hddfancontrol when I ran pip3 install hddfancontrol. The result was Failed to build hddfancontrol. The cause was error: invalid command 'bdist_wheel' and Running setup.py bdist_wheel for hddfancontrol ... error. The error was fixed by running the following:
 pip3 install wheel
(From here.)
Alternatively, the "wheel" can be downloaded directly from here. When downloaded, it can be installed by running the following:
pip3 install "/the/file_path/to/wheel-0.32.3-py2.py3-none-any.whl"
ACCEPTED ANSWER
Score 63
Since, nobody seem to mention this apart myself. My own solution to the above problem is most often to make sure to disable the cached copy by using: pip install <package> --no-cache-dir.
ANSWER 4
Score 6
It might be helpful to address this question from a package deployment perspective.
There are many tutorials out there that explain how to publish a package to PyPi. Below are a couple I have used;
My experience is that most of these tutorials only have you use the .tar of the source, not a wheel. Thus, when installing packages created using these tutorials, I've received the "Failed to build wheel" error.
I later found the link on PyPi to the Python Software Foundation's docs PSF Docs. I discovered that their setup and build process is slightly different, and does indeed included building a wheel file.
After using the officially documented method, I no longer received the error when installing my packages.
So, the error might simply be a matter of how the developer packaged and deployed the project. None of us were born knowing how to use PyPi, and if they happened upon the wrong tutorial -- well, you can fill in the blanks.
I'm sure that is not the only reason for the error, but I'm willing to bet that is a major reason for it.