作为 pip install 用户,我应该安装 wheel 吗?
As a pip install user, am I supposed to have wheel installed?
考虑通常的场景——我想创建一个虚拟环境并安装一些包。说
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
),因此我应该在他们的 [=28= 中打开一个问题]?
更新:请注意 wheel
不是安装轮子所必需的,在此示例中,一堆依赖项已成功下载并安装为轮子。唯一的 databricks-cli 包出现错误,因为它没有轮子,但出于某种原因,pip 尝试构建它。
更新 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()
函数将无济于事,并且在安装脚本中手动检查包 ( + 可能需要在 README 中引用),这样最终用户才能正确安装它。
例如,如果它不存在于系统中,只需打印警告并调用 exit()
。这是维护者至少应该做的。
更新:
是的,如果遇到 bdist_wheel
命令丢失的情况,您需要使用 pip instal wheel
.
安装 wheel
这不是必需的,但建议这样做。 Pip 可以在没有轮子的情况下正常工作,但您将从源代码安装(tar.gz
、.zip
或 .egg
)。
请参阅 the packaging discussion 了解是使用 wheel 还是 egg(或 source)。
这是一个 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 中的一个相关问题。不完全是这样,但是在评论中有关于轮子构建逻辑应该是什么的解释。
考虑通常的场景——我想创建一个虚拟环境并安装一些包。说
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
),因此我应该在他们的 [=28= 中打开一个问题]?
更新:请注意 wheel
不是安装轮子所必需的,在此示例中,一堆依赖项已成功下载并安装为轮子。唯一的 databricks-cli 包出现错误,因为它没有轮子,但出于某种原因,pip 尝试构建它。
更新 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()
函数将无济于事,并且在安装脚本中手动检查包 ( + 可能需要在 README 中引用),这样最终用户才能正确安装它。
例如,如果它不存在于系统中,只需打印警告并调用 exit()
。这是维护者至少应该做的。
更新:
是的,如果遇到 bdist_wheel
命令丢失的情况,您需要使用 pip instal wheel
.
这不是必需的,但建议这样做。 Pip 可以在没有轮子的情况下正常工作,但您将从源代码安装(tar.gz
、.zip
或 .egg
)。
请参阅 the packaging discussion 了解是使用 wheel 还是 egg(或 source)。
这是一个 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 中的一个相关问题。不完全是这样,但是在评论中有关于轮子构建逻辑应该是什么的解释。