为什么 python setup.py 在 Travis CI 上说无效命令 'bdist_wheel'?

Why is python setup.py saying invalid command 'bdist_wheel' on Travis CI?

我的 Python 包有一个 setup.py 可以在本地 Ubuntu Trusty 和新的 Vagrant Ubuntu Trusty VM 上正常构建,当我像这样配置它时:

sudo apt-get install python python-dev --force-yes --assume-yes --fix-broken
curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | sudo python2.7
sudo -H pip install setuptools wheel virtualenv --upgrade

但是当我在 Travis CI Trusty Beta VM 上做同样的事情时:

- sudo apt-get install python python-dev --force-yes --assume-yes --fix-broken
- curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | sudo python2.7
- sudo -H pip install setuptools wheel virtualenv --upgrade

我得到:

python2.7 setup.py bdist_wheel
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'

Why can I not create a wheel in python? 是相关的,但请注意我正在安装 wheel 并升级 setuptools。

此问题是由于:

  • 正在为 Python 2.7
  • 安装旧版本的 pip (6.1.1)
  • 在 Trusty Beta 映像上安装了 Python 2.7 的多个副本
  • Python 2.7 的不同位置用于 sudo

这一切都有点复杂,在这里更好地解释 https://github.com/travis-ci/travis-ci/issues/4989

我的解决方案是使用用户 travis 而不是 sudo 安装:

- pip2.7 install --upgrade --user travis pip setuptools wheel virtualenv

必须安装 wheel 包。一切都是最新的,但仍然出现错误。

pip install wheel

然后

python setup.py bdist_wheel 

工作没有问题。

这个错误很奇怪,因为许多建议的答案和得到的解决方案都是混合的。我试过了,添加它们。只有当我添加 pip install --upgrade pip 终于为我消除了错误。但是我没有时间去区分哪个是哪个,所以仅供参考。

如果您已经安装了所有必需的模块,您可能需要在 setup.py 文件中导入 setuptools 模块。所以只需在 setup.py 文件的开头添加以下行。

import setuptools
from distutils.core import setup
# other imports and setups

wheel 的文档中也提到了这一点。 https://wheel.readthedocs.io/en/stable/#usage

我已经安装了 wheel,所以我尝试卸载并重新安装,它解决了问题:

pip uninstall wheel
pip install wheel

奇怪...

我的修复是 apt install python3-dev

pip install wheel

对我有用,但你也可以添加这个

setup(
    ...
    setup_requires=['wheel']
)

到 setup.py 并为自己保存一个 pip 安装命令

尝试通过从 setuptools 而不是 distutils.core

导入设置来修改 setup.py 文件

与特拉维斯无关 CI 但 我 运行 遇到了类似的问题,试图在我的 Mac OSX 10.8.5 上安装 jupyter,其他答案的 none 很有帮助。问题是由为名为 pyzmq 的包构建 "wheel" 引起的,错误消息占了数百页。

我找到的解决方案是直接安装该软件包的旧版本:

python -m pip install pyzmq==17 --user

之后,jupyter安装成功,没有错误。

它帮助我按照此处的说明进行操作:

https://packaging.python.org/guides/installing-using-linux-tools/

Debian/Ubuntu

Python 2:

sudo apt install python-pip

Python 3:

sudo apt install python3-venv python3-pip

使用 Ubuntu 18.04 可以通过安装 python3-wheel 软件包解决此问题。

通常这是作为任何 Python 包的依赖项安装的。但尤其是在构建容器镜像时,您经常使用 --no-install-recommends,因此它经常丢失,必须先手动安装。

就我而言,venv 创建的 wheel/pip/setuptools 版本太旧了。 这有效:

venv/bin/pip  install --upgrade pip wheel setuptools

在 AWS Ubuntu 18.04 new machine 上,需要进行以下安装:

sudo apt-get install gcc libpq-dev -y
sudo apt-get install python-dev  python-pip -y
sudo apt-get install python3-dev python3-pip python3-venv python3-wheel -y
pip3 install wheel

特别是最后一行是必须的
但是,可能需要 3 行作为先决条件。

在您的 setup.py 中,如果您有:

from distutils.core import setup

然后,将其更改为

from setuptools import setup

然后重新创建您的 virtualenv 并重新运行 命令,它应该可以工作。

我在 Ubuntu 中做了 apt-get install python3-dev 并在 setup.py

中添加了 setup_requires=["wheel"]

如果您使用的是 setup.cfg 文件,请在 install_require 部分之前添加:

setup_requires =
    wheel

setup.cfg 项目示例:

# setup.py
from setuptools import setup

setup()
# setup.cfg
[metadata]
name = name
version = 0.0.1
description = desc
long_description = file: README.md
long_description_content_type = text/markdown
url = url
author = author
classifiers =
    Programming Language :: Python
    Programming Language :: Python :: 3

[options]
include_package_data = true
packages = find:
setup_requires =
    wheel
install_requires =
    packages
    packages
    packages

如果上述 none 对您有效,那么您可能遇到了与我相同的问题。我只是在尝试安装 pyspark 时才看到此错误。该解决方案在另一个 Whosebug 问题 unable to install pyspark.

中进行了解释

我 post 这个 b/c 我并没有立即从错误消息中看出我的问题完全源于 pysparkpypandoc 的依赖我希望能将其他人从数小时的挠头中解救出来! =)

也许,您的 pip 版本已过时。在新创建的虚拟环境中安装模块时,我在 WSL 中遇到了同样的问题。我能够通过 运行 以下命令解决它:

$ ./bin/python3 -m pip install --upgrade pip 

方法一:更新pip

python3 -m pip install --upgrade pip

方法二:必须安装wheel包

pip install wheel
python setup.py bdist_wheel 

获取更多解决方案,exerror, github

我尝试了上面给出的pip install wheel指令,但它没有用,因为我被告知要求已经满足。事实证明,我使用的是 python-3.10 和 python-3.9 站点包中的 pip。我终于意识到,通过输入 python --versionpip --version 并比较目录。

有了这个认识,我安装了一个新版本的 pip 来配合我的 python-3.10,安装了 wheel,一切正常。