【问题标题】:As a pip install user, am I supposed to have wheel installed?作为 pip install 用户,我应该安装轮子吗?
【发布时间】:2021-07-14 09:06:49
【问题描述】:

考虑通常的场景——我想创建一个虚拟环境并安装一些包。说

python3 -m venv venv
source venv/bin/activate
pip install databricks-cli

在安装过程中出现错误

Building wheels for collected packages: databricks-cli
Building wheel for databricks-cli (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: /home/paulius/Documents/wheeltest/venv/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-m7jmyh1m/databricks-cli/setup.py'"'"'; __file__='"'"'/tmp/pip-install-m7jmyh1m/databricks-cli/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-maxix98x
   cwd: /tmp/pip-install-m7jmyh1m/databricks-cli/
Complete output (8 lines):
/tmp/pip-install-m7jmyh1m/databricks-cli/setup.py:24: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
import imp
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
 or: setup.py --help [cmd1 cmd2 ...]
 or: setup.py --help-commands
 or: setup.py cmd --help

error: invalid command 'bdist_wheel'
----------------------------------------
ERROR: Failed building wheel for databricks-cli

虽然它是良性的(安装确实有效),但它仍然很烦人。

我知道pip install wheel 可以解决这个问题,但wheel 默认情况下不附带虚拟环境。所以我应该总是将它添加到我的 requirements.txt 中,或者这可能是包维护者可以解决的问题(在本例中为 databricks-cli),因此我应该在他们的 Github 中打开一个问题?


更新:请注意wheel 不是安装轮子所必需的,在此示例中,一堆依赖项已成功下载并安装为轮子。唯一的 databricks-cli 包出现错误,因为它没有轮子,但出于某种原因,pip 尝试构建它。

【问题讨论】:

  • 你试过用pip install databricks_cli-0.14.3-py2-none-any.whl安装wheel-file吗?有了那个 pip 就不需要从源代码构建轮子了。
  • @KlimBim 不,我没有。我希望 pip 自己找到最好的文件,而无需我搜索适当的二进制文件。 (而且我认为它是这样做的,在这种情况下,轮子是用于 python2,所以它不适合我的 venv)。
  • 我想知道为什么它不起作用。如果您安装下载的pip install databricks-cli-0.14.3.tar.gz 并且pip 找不到wheel,它会在压缩包中使用setup.py。我试过了,pip 使用了旧版setup.py install

标签: python pip python-wheel


【解决方案1】:

更新 3:

为了防止它从维护者的角度使用:

setup_requires=["wheel"]

您似乎在 Linux 上使用预安装或以其他方式修改的 Python 及其setuptools

由于 Debian 以不太理智的方式切断了部分软件包,我也经历过同样的事情,而且我主要遇到了预建的 python-setuptools 和喜欢的问题。检查版本是否匹配,如果不匹配,请从 pip 安装 setuptools,这可能会有所帮助。

我有 setuptools 45.2.0 并且将软件包安装为轮子没有问题。然后我卸载了wheel并删除了缓存目录,它甚至从the tar.gz source正确安装。

更新 2:

要求wheel 包可能会也可能不会解决。如果setup.py 期望bdist_wheel 在安装之前存在(很可能),将其添加到setup() 函数将无济于事,并且手动检查安装脚本中的包(+ 可能是自述文件中的参考) 是必需的,因此最终用户可以正确安装它。

例如,如果它不存在于系统中,只需打印一条警告并调用exit()。这是维护者至少应该做的。


更新:

是的,如果您遇到bdist_wheel 命令丢失的情况,您需要安装带有pip instal wheel 的wheel。


这不是必需的,但建议这样做。 Pip 在没有轮子的情况下也可以正常工作,但您将从源代码安装(tar.gz.zip.egg)。

请参阅the packaging discussion 了解是否使用轮子或鸡蛋(或来源)。

【讨论】:

  • 我还是不太明白。如果我查看示例 databricks-cli 文件的 setup.py (这里整洁而小github.com/databricks/databricks-cli/blob/master/setup.py),我看不到任何表明应该建造轮子的东西,那么为什么要尝试它以及维护人员应该如何阻止它?
  • 另请参阅我为澄清您的第一个初步答案而提出的问题的更新
  • 谢谢,但我认为这是不正确的,这实际上是一个 pip 错误,已修复 - 使用 pip 21.1.3(最新)我不再收到错误,但很好而是警告。
  • @psarka 似乎是一个相当新的错误。我在其中一台机器上有20.3.3,即使在那里我也对其进行了测试——没有问题。我很高兴它在更新后工作。也许尝试使用pip install --no-cache-dir 进行验证。
  • 我收到了20.0.2 的错误,所以它必须介于两者之间。感谢您的帮助!
【解决方案2】:

这是一个 pip 错误,解决方案是升级 pip。使用最新版本,一切看起来都很好:

(venv) paulius@xps:~/Documents/wheeltest$ pip install databricks-cli
Collecting databricks-cli
  Using cached databricks-cli-0.14.3.tar.gz (54 kB)
Collecting click>=6.7
  Using cached click-8.0.1-py3-none-any.whl (97 kB)
Collecting requests>=2.17.3
  Using cached requests-2.26.0-py2.py3-none-any.whl (62 kB)
Collecting six>=1.10.0
  Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting tabulate>=0.7.7
  Using cached tabulate-0.8.9-py3-none-any.whl (25 kB)
Collecting idna<4,>=2.5
  Using cached idna-3.2-py3-none-any.whl (59 kB)
Collecting certifi>=2017.4.17
  Using cached certifi-2021.5.30-py2.py3-none-any.whl (145 kB)
Collecting urllib3<1.27,>=1.21.1
  Using cached urllib3-1.26.6-py2.py3-none-any.whl (138 kB)
Collecting charset-normalizer~=2.0.0
  Using cached charset_normalizer-2.0.1-py3-none-any.whl (35 kB)
Using legacy 'setup.py install' for databricks-cli, since package 'wheel' is not installed.
Installing collected packages: urllib3, idna, charset-normalizer, certifi, tabulate, six, requests, click, databricks-cli
    Running setup.py install for databricks-cli ... done
Successfully installed certifi-2021.5.30 charset-normalizer-2.0.1 click-8.0.1 databricks-cli-0.14.3 idna-3.2 requests-2.26.0 six-1.16.0 tabulate-0.8.9 urllib3-1.26.6

注意Using legacy 'setup.py install' ... 行。

这是 pip github https://github.com/pypa/pip/issues/8302 中的一个相关问题。不完全是这样,但在 cmets 中有一个解释是什么是车轮制造逻辑。

【讨论】:

    猜你喜欢
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2021-04-06
    • 2017-02-28
    • 2020-04-22
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多