pip install中“X的构建失败”是什么意思?

新手上路,请多包涵

这是 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

原文由 not2qubit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 929
2 个回答

因为,除了我自己,似乎没有人提到这一点。我自己对上述问题的解决方案通常是确保使用以下方法禁用 缓存 副本: pip install <package> --no-cache-dir

原文由 not2qubit 发布,翻译遵循 CC BY-SA 4.0 许可协议

(这里是 pip 维护者!)

快速复制粘贴:

 pip install wheel

在使用 venv 创建的每个新虚拟环境中执行此操作。

继续阅读以获取详细信息和解释。


如果包不是轮子,pip 会尝试为其构建一个轮子(通过 setup.py bdist_wheel )。如果由于任何原因失败(例如,缺少系统级库、与系统不兼容、构建轮中的错误版本字符串等),您将收到“{…} 构建轮失败”消息。

目前,在其中一些情况下,pip 回退到通过 setup.py install 安装,因此安装仍有可能成功。也就是说,pip 总是尽可能多地尝试通过轮子安装包。这是因为使用轮子的各种优点(比如更快的安装、可缓存、不再执行代码等)以及它是一种标准格式的事实;与(已弃用的)setup.py 安装界面不同。


您的错误消息是由于缺少 wheel 包,其中包含在 setup.py bdist_wheel 中构建轮子所需的逻辑。 ( pip install wheel 可以解决这个问题——但它不会解决由于系统配置而导致的任何构建时间问题)


将来的某个时候,我们将默认切换到更现代的构建系统(如果您是包作者,您可以通过添加 pyproject.toml 来选择加入),这将通过隔离解决这个问题构建将安装 wheel 的环境。 :)

原文由 pradyunsg 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题