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

nok*_*ome 200 python pypi setup.py 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
Run Code Online (Sandbox Code Playgroud)

但是当我在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
Run Code Online (Sandbox Code Playgroud)

我明白了:

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'
Run Code Online (Sandbox Code Playgroud)

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

frm*_*ryr 308

不得不安装wheel包.一切都是最新的,但仍然给出了错误.

pip install wheel
Run Code Online (Sandbox Code Playgroud)

然后

python setup.py bdist_wheel 
Run Code Online (Sandbox Code Playgroud)

工作没有问题.

  • "pip安装轮"有时就足够了 (38认同)
  • 我需要`pip3 install wheel`-因为我已经为`pip`安装了wheel,但是没有为`pip3`安装的。 (12认同)
  • 有没有办法在干净的虚拟环境中自动安装“wheel”?`python3 -m venv --system-site-packages` 将添加太多包。 (8认同)
  • 这有效,但在“pip installwheel”之后,我必须“pip uninstall -rrequirements.txt”并重做“pipinstall-rrequirements.txt” (5认同)
  • `无法打开文件'setup.py':[Errno 2]没有这样的文件或目录` (5认同)
  • @Cerin `pip installwheel` 就足够了。 (2认同)
  • @TobiasSette如果您使用的是“virtualenv”而不是“venv”,您可以使用有效版本指定“virtualenv myvenv --wheel <VERSION>”,它将确保创建后该版本存在于“virtualenv”中。 (2认同)

Man*_*ddy 221

2020 年 1 月

浪费了2个小时。

在 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
Run Code Online (Sandbox Code Playgroud)

尤其是最后一行是必须的。
然而,在 3 行之前可能需要作为先决条件。

希望有帮助。

  • 我在 Docker 映像([DL3015](https://github.com/hadolint/hadolint/wiki/DL3015))中使用 `--no-install-recommends` 并遇到此错误,我需要显式安装 ` python3-wheel`。谢谢! (13认同)
  • 整整一年过去了,你帮我省去了很多麻烦。谢谢。 (9认同)
  • 我还必须安装 sudo apt install build-essential ,因为我在 pip3 install shap 时遇到了同样的问题。然后就可以了! (2认同)
  • @ManoharReddyPoreddy 我不相信这是由工具所有者引起的,而是由 ubuntu 软件包维护者引起的。`bdist_wheel` 被[列出](https://github.com/pypa/wheel/blob/b8c4aa055cea0132776e7e53edce3538710d5b68/setup.cfg#L53)作为wheel包的入口点。因此安装它应该将命令放在您的路径中。然而,ubuntu 包 `python3-wheel` 不包含 `/usr/bin/bdist_wheel` 或任何入口点。此处列出的文件:https://packages.ubuntu.com/focal/all/python3-wheel/filelist (2认同)

Nat*_*ile 57

pip install wheel
Run Code Online (Sandbox Code Playgroud)

为我工作,但您也可以添加此内容

setup(
    ...
    setup_requires=['wheel']
)
Run Code Online (Sandbox Code Playgroud)

来setup.py并保存一个pip install命令

  • 那些人已经安装了滚轮,但是仍然出现错误,可以添加`setup_requires = ['wheel']`来消除此错误。 (2认同)
  • 这没有按预期工作: 1 - 起初它工作只是因为我们用 pip 安装了 `wheel`。在全新安装中它将再次失败 2 - [文档](https://setuptools.readthedocs.io/en/latest/setuptools.html) 说“注意:setup_requires 中列出的项目不会自动安装在系统上安装脚本正在运行。” (2认同)

nok*_*ome 39

这个问题是由于:

  • 为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
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,`sudo -H pip install setuptools --upgrade`解决了这个问题. (7认同)
  • @MartinThoma 感谢您的提示。在发出“sudo -H pip install wheel --upgrade”后,它对我有用 (2认同)

wyn*_*emo 34

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

venv/bin/pip  install --upgrade pip wheel setuptools
Run Code Online (Sandbox Code Playgroud)


Kas*_*mvd 32

如果已经安装了所有必需的模块,则可能需要setuptoolssetup.py文件中导入模块.所以只需在setup.py文件的前面添加以下行.

import setuptools
from distutils.core import setup
# other imports and setups
Run Code Online (Sandbox Code Playgroud)

这在wheel的文档中也有提到.https://wheel.readthedocs.io/en/stable/#usage

  • 这对我有用。我使用distutils而不是setuptools进行安装,并且已经安装了wheel软件包。 (4认同)
  • 谢谢!这是我的解决方案。 (2认同)

typ*_*gic 22

这个错误很奇怪,很多提议的答案和混合解决方案.我尝试了它们,添加它们.只有当我添加pip install --upgrade pip最终为我删除错误.但是我没有时间去隔离哪个,所以这只是fyi.


Phi*_*emy 17

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

from distutils.core import setup
Run Code Online (Sandbox Code Playgroud)

然后,将其更改为

from setuptools import setup
Run Code Online (Sandbox Code Playgroud)

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

  • 这解决了我的问题。谢谢。+1 (2认同)

Sat*_*ran 10

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

$ ./bin/python3 -m pip install --upgrade pip 
Run Code Online (Sandbox Code Playgroud)


Jer*_*her 9

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

pip uninstall wheel
pip install wheel
Run Code Online (Sandbox Code Playgroud)

奇怪的...


Roh*_*007 9

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

  • 运行“pip installwheel”可能就足够了。 (31认同)
  • `setup.py` 应该位于哪里?换句话说:哪个“setup.py”? (2认同)

702*_*279 7

我的解决方法是 apt install python3-dev

  • 是的,并将 `setup_requires=["wheel"]` 添加到您的 setup.py (2认同)

小智 6

尝试通过从 setuptools 而不是 distutils.core 导入 setup 来修改 setup.py 文件


sod*_*mel 6

如果您使用setup.cfg文件,请在该install_require部分之前添加以下内容:

setup_requires =
    wheel
Run Code Online (Sandbox Code Playgroud)

setup.cfg 项目示例:

# setup.py
from setuptools import setup

setup()
Run Code Online (Sandbox Code Playgroud)
# 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
Run Code Online (Sandbox Code Playgroud)