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

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

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

但是,当我在Travis CI Trusted 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_wheelusage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]or: setup.py --help [cmd1 cmd2 ...]or: setup.py --help-commandsor: setup.py cmd --helperror: invalid command 'bdist_wheel'

这个为什么我不能在python中创建一个轮子?是相关的,但请注意,我正在安装轮子和升级setupols。

696684 次浏览

这个问题是由于:

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

这一切都有点复杂,在这里更好地解释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 setuptoolsfrom distutils.core import setup# other imports and setups

这也是在车轮的留档中提到的。

我已经安装了wheel,所以我尝试卸载并重新安装,它修复了这个问题:

pip uninstall wheelpip install wheel

奇怪…

我的修复是apt install python3-dev

pip install wheel

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

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

setup.py并保存一个pip安装命令

尝试通过从setupols导入安装程序而不是distutils.core来修改setup.py文件

与Travis CI无关,但我在尝试在我的Mac OSX 10.8.5上安装jupyter时遇到了类似的问题,其他答案都没有帮助。问题是由为名为pyzmq的包构建“轮子”引起的,错误消息填满了数百页。

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

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

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

它帮助我遵循这里的指示:

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

Debian/Ubuntu

python2:

sudo apt install python-pip

python3:

sudo apt install python3-venv python3-pip

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

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

在我的情况下,venv创建的Whem/pip/setupols版本太旧了。这个工作:

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

在AWSUbuntu 18.04 new machine上,需要以下安装:

sudo apt-get install gcc libpq-dev -ysudo apt-get install python-dev  python-pip -ysudo apt-get install python3-dev python3-pip python3-venv python3-wheel -ypip3 install wheel

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

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

from distutils.core import setup

然后,将其更改为

from setuptools import setup

然后重新创建虚拟环境并重新运行命令,它应该可以工作。

我在我的Ubuntu中做了apt-get install python3-dev,并在setup.py中添加了setup_requires=["wheel"]

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

setup_requires =wheel

setup.cfg项目示例:

# setup.pyfrom setuptools import setup
setup()
# setup.cfg[metadata]name = nameversion = 0.0.1description = desclong_description = file: README.mdlong_description_content_type = text/markdownurl = urlauthor = authorclassifiers =Programming Language :: PythonProgramming Language :: Python :: 3
[options]include_package_data = truepackages = find:setup_requires =wheelinstall_requires =packagespackagespackages

如果上述方法都不适用于您,那么您可能遇到了与我相同的问题。我只是在尝试安装pyspark时才看到此错误。解决方案在另一个stackoverflow问题无法安装pyspark中解释。

我发布了这个b/c,从错误消息中我并没有立即明显地看出我的问题仅仅源于pysparkpypandoc的依赖,我希望能让其他人免于数小时的挠头!=)

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

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

我尝试了上面给出的pip install wheel指令,但它不起作用,因为我被告知需求已经满足。原来我使用的是python-3.10和python-3.9站点包中的pip。通过输入python --versionpip --version并比较目录,我终于意识到这一点。

有了这个实现,我安装了一个新版本的pip来配合我的python-3.10,安装了轮子,一切正常。

正如菲利普·雷米所说,应该从setuptools

导入
from setuptools import setup

参考:官方文档https://setuptools.pypa.io/en/latest/index.html