【发布时间】: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扩展名)
标签: python python-3.x pip python-wheel