pip install中“X的构建失败”是啥意思?
Posted
技术标签:
【中文标题】pip install中“X的构建失败”是啥意思?【英文标题】:What is the meaning of "Failed building wheel for X" in pip install?pip install中“X的构建失败”是什么意思? 【发布时间】:2019-04-11 19:04:39 【问题描述】:这是 SO 上一个非常受欢迎的问题,但我看过的许多答案都没有清楚地解释这个错误的真正含义以及它发生的原因。
混淆的一个来源是,当(例如)您执行pip install pycparser
时,您首先会收到错误:
Failed building wheel for pycparser
然后是包裹的消息:
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
这是怎么回事?
(我想了解某些东西是如何发生故障但仍然安装的,以及您是否可以信任此软件包正常运行?)
到目前为止,我找到的最好的部分解释是this。
【问题讨论】:
当pip
没有找到所需的***时,它会下载源 dist 并尝试在本地构建***。成功后,该***将存储在pip
的缓存中以供将来重新安装。在车轮构建失败时,pip
从源 dist 切换到旧版安装(调用 python setup.py install
)。
在您的情况下,您缺少 wheel
包,因此 pip
无法从源 dist 构建***。如果您想明确禁用构建轮,请使用--no-binary
标志:pip install somepkg --no-binary=somepkg
。或使用pip install somepkg --no-binary=:all:
,但请注意,这将禁用每个选择安装的包的***,包括依赖项;如果某些软件包pip
需要安装时没有可用的源 dist,则安装将失败。
@hoefling:您的第一条评论是真正的原因,可能是一个答案。第二个错误:--no-binary
指示 pip 仅 下载 并使用源代码分发。阻止它构建本地二进制轮的标志确实是--no-cache-dir
。
@hoefling 我有wheels
(0.32.2) 所以这不是问题。但也许pycparser
包没有关联的***(*.whl
)?但是我怎样才能检查这个 a-priori?
您可以通过pypi.org/project/pycparser 咨询PyPI 站点,然后询问files。然后你可以看到那里只有一个 .tar.gz
文件,它是 PyPI 上的源代码分发(一个***会有一个 .whl
扩展名)
【参考方案1】:
昨天,我在运行pip3 install hddfancontrol
时遇到了同样的错误:Failed building wheel for hddfancontrol
。结果是Failed to build hddfancontrol
。原因是error: invalid command 'bdist_wheel'
和Running setup.py bdist_wheel for hddfancontrol ... error
。通过运行以下命令修复了该错误:
pip3 install wheel
(来自here。)
或者,“***”可以直接从here 下载。下载后,可以通过运行以下命令进行安装:
pip3 install "/the/file_path/to/wheel-0.32.3-py2.py3-none-any.whl"
【讨论】:
pip3 install wheel
工作得很好,即使在“python3 -m venv”内部,从今天起我还是 venv 的新手
即使在安装***之后它对我也不起作用!
这实际上解决了 python --version 抛出错误,但 python3 --version 有效的情况。谢谢!【参考方案2】:
从包部署的角度解决这个问题可能会有所帮助。
有很多教程解释了如何将包发布到 PyPi。以下是我用过的一对;
mediumreal python
我的经验是,这些教程中的大多数只让你使用源的 .tar,而不是***。因此,在安装使用这些教程创建的软件包时,我收到了“无法构建***”错误。
我后来在 PyPi 上找到了 Python 软件基金会的文档 PSF Docs 的链接。我发现他们的设置和构建过程略有不同,并且确实包括构建一个***文件。
使用官方记录的方法后,安装包时不再收到错误消息。
因此,错误可能只是开发人员如何打包和部署项目的问题。我们谁都不是生来就知道如何使用 PyPi,如果他们碰巧在错误的教程上——好吧,你可以填补空白。
我确信这不是错误的唯一原因,但我愿意打赌这是造成错误的主要原因。
【讨论】:
【参考方案3】:(这里是 pip 维护者!)
如果包不是***,pip 会尝试为它构建一个***(通过setup.py bdist_wheel
)。如果由于任何原因失败,您会收到“pycparser 构建***失败”消息,并且 pip 会退回到直接安装(通过setup.py install
)。
一旦我们有了***,pip 就可以通过正确拆包来安装***。 pip 尝试尽可能频繁地通过***安装软件包。这是因为使用***的各种优势(例如更快的安装、可缓存、不再执行代码等)。
您的错误消息是由于缺少wheel
包,其中包含在setup.py bdist_wheel
中构建***所需的逻辑。 (pip install wheel
可以解决这个问题。)
以上是当前默认的遗留行为;默认情况下,我们将切换到 PEP 517,在未来的某个时候,我们将转向基于标准的流程。我们还为此提供了独立的构建,因此默认情况下您会在这些环境中安装***。 :)
PEP 517:A build-system independent format for source trees 关于“PEP 517 and 518 in Plain English”的博文【讨论】:
在编写 OP 时,我已经安装了wheel
包。另请添加指向 PEP517 的链接。
您是否安装了旧版本的 setuptools 或 wheel?如果不是,那似乎是那里失败的原因。无论如何,从 pip 的 POV 来看,它无法构建***,因此它可以正常安装。
有没有办法跳过***生成 (setup.py bdist_wheel
) 直接安装 (setup.py install
)?
还要确保wheel包安装在你操作的虚拟环境中(不仅仅是机器)。
@K3---rnc 没有尚未弃用的。【参考方案4】:
从那以后,除了我自己,似乎没有人提及这件事。对于上述问题,我自己的解决方案通常是确保禁用 缓存 副本,方法是使用:pip install <package> --no-cache-dir
。
【讨论】:
如果只是摆脱消息是您的目标,这可能算作修复,否则我会称之为解决方法。 @NilsMagnus 这不是只是getting rid of the message
,它允许安装继续进行,即使安装程序认为它已经更新,因为缓存目录包含以前更新且经常失败的更新的残留物。
^^ 那 说,我一直想知道为什么这不是默认行为?谁想在更新时保留缓存副本?只是没有任何意义。
这个问题的公认答案如何?它没有回答问题。
因为他自己问过也回答过。我认为这样他可以接受我相信的自己的答案。听起来很奇怪,但可能就是这样。【参考方案5】:
试试这个:
sudo apt-get install libpcap-dev libpq-dev
当我安装这两个时它对我有用。
查看链接here了解更多信息
【讨论】:
【参考方案6】:在 Ubuntu 18.04 上,我遇到了这个问题,因为 wheel
的 apt
包不包含 wheel
命令。我认为 pip 尝试导入 wheel
python 包,如果成功则假定 wheel
命令也可用。 Ubuntu 打破了这个假设。
apt python3 代码包名为python3-wheel
。这是自动安装的,因为python3-pip
推荐它。
apt python3 wheel 命令包名为python-wheel-common
。安装它也为我修复了“失败的构建轮”错误。
【讨论】:
bug report【参考方案7】:我在尝试安装时收到了同样的消息
pip install django-imagekit.
所以我跑了
pip install wheel
(我有 python 2.7)然后我重新运行 pip install django-imagekit
并且它起作用了。
【讨论】:
【参考方案8】:这可能会帮助你! ....
卸载pycparser:
pip uninstall pycparser
重新安装pycparser:
pip install pycparser
我在安装 termcolor 时遇到了同样的错误,我通过重新安装来修复它。
【讨论】:
【参考方案9】:我想补充一点,如果您的系统上只有 Python3,那么您需要开始使用 pip3 而不是 pip。
您可以使用以下命令安装 pip3;
sudo apt install python3-pip -y
之后你可以尝试安装你需要的包;
sudo pip3 install <package>
【讨论】:
最好你使用python3 -m pip
,而不是pip3
,但是这两种解决方案都没有解决问题中的错误【参考方案10】:
错误:
系统:aws ec2 实例(t2 小)
问题:通过安装 opencv python 时
pip3 install opencv-python
Problem with the CMake installation, aborting build. CMake executable is cmake
----------------------------------------
Failed building wheel for opencv-python
Running setup.py clean for opencv-python
什么对我有用
pip3 install --upgrade pip setuptools wheel
在此之后您仍然可能收到休闲错误错误
from .cv2 import *
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
安装 libgl 为我解决了这个错误。
sudo apt update
sudo apt install libgl1-mesa-glx
希望对你有帮助
【讨论】:
pip3 install --upgrade pip setuptools wheel
也为我解决了这个问题【参考方案11】:
我在安装 Brotli 时遇到了同样的问题
错误
Failed building wheel for Brotli
我通过从here 下载.whl
文件解决了这个问题
并使用以下命令安装它
C:\Users\user_name\Downloads>pip install Brotli-1.0.9-cp39-cp39-win_amd64.whl
【讨论】:
【参考方案12】:在我的例子中,在创建 venv 之后更新 pip 版本,这个更新 pip 从 9.0.1 到 20.3.1
python3 -m venv env/python
source env/python/bin/activate
pip3 install pip --upgrade
但是,消息是……
Using legacy 'setup.py install' for django-avatar, since package 'wheel' is not installed.
然后,我更新pip后安装wheel包
python3 -m venv env/python
source env/python/bin/activate
pip3 install --upgrade pip
pip3 install wheel
消息是……
Building wheel for django-avatar (setup.py): started
default: Building wheel for django-avatar (setup.py): finished with status 'done'
【讨论】:
【参考方案13】:此错误主要出现在您没有 wheel 所需的软件包时。 如果您使用的是 python3,则安装 python3-dev 或 python2-dev 如果您使用的是 python 2。
sudo apt-get install python3-dev
或
sudo apt-get install python2-dev
【讨论】:
【参考方案14】:我试图安装python-nmap
工具,并收到此错误。
如果你是Linux平台,请确保安装了nmap
工具,否则库python-nmap
将无法使用。
在基于 Red Hat 的发行版上,请按如下方式安装 nmap
CLI:
sudo yum install namp
【讨论】:
【参考方案15】:当我尝试安装需要“isal”的软件包时,我被这个问题困扰了几个小时,但 isal 安装失败:
----------------------------------------
ERROR: Failed building wheel for isal
Failed to build isal
ERROR: Could not build wheels for isal which use PEP 517 and cannot be installed directly
适合我的解决方案是安装 libtool。
yum install libtool
【讨论】:
以上是关于pip install中“X的构建失败”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
pip 相当于 `npm install package --save-dev` 是啥?
“pip install --user ...”的目的是啥?