Почему python setup.py говорит недопустимую команду 'bdist_wheel' в Travis CI?

331

В моем пакете 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'

Это Почему я не могу создать колесо в Python? связано, но обратите внимание, я устанавливаю колесо и обновляю setuptools.

nokome
источник

Ответы:

471

Пришлось установить wheelпакет. Все было в курсе, но все еще дает ошибку.

pip install wheel

затем

python setup.py bdist_wheel 

Работал без проблем.

frmdstryr
источник
59
«Колесо для установки
пипса
20
Я нуждался pip3 install wheel- потому что у меня уже было колесо, установленное для, pipно не pip3.
TetraDev
2
Это сработало, но после того, как pip install wheelмне пришлось pip uninstall -r requirements.txtи повторитьpip install -r requirements.txt
simple_code
9
can't open file 'setup.py': [Errno 2] No such file or directory
Серин
4
Есть ли способ автоматической установки wheelв чистой виртуальной среде? python3 -m venv --system-site-packagesдобавит слишком много пакетов.
Тобиас Сетте
83
pip install wheel

работал для меня, но вы также можете добавить это

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

в setup.py и сохраните команду pip install

Натаниэль Джентиле
источник
2
Те люди, у которых уже есть колесо, и все еще получающие ошибку, могут добавить, setup_requires=['wheel']чтобы избавиться от этой ошибки
Шанкар Пандала
1
Это не работает должным образом: 1 - сначала это работает только потому, что мы установили wheelс помощью pip. В случае чистой установки 2 произойдет сбой. Документация гласит: «Примечание: проекты, перечисленные в setup_requires, НЕ будут автоматически установлены в системе, где выполняется сценарий установки».
Тобиас Сетте
Не только это, @TobiasSette, но и та же ссылка на документацию гласит: «Предупреждение Использование setup_requires не рекомендуется в пользу PEP-518».
Джефф Райт
73

Январь 2020

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

Особенно последняя строка должна.
Однако перед 3 строки могут потребоваться в качестве предварительных условий.

Надеюсь, это поможет.

Манохар Редди Поредди
источник
2
Ровно через год, и вы избавили меня от многих трудностей. Спасибо.
DaveTheMinion
7
Я использовал --no-install-recommendsв образе Docker ( DL3015 ) и столкнулся с этой ошибкой, мне нужно было явно установить python3-wheel. Спасибо!
dimo414
Приятно знать, что это помогло, моя была в виртуальной среде (venv).
Манохар Редди Поредди
1
сэкономил мне часы! Большое спасибо @ManoharReddyPoreddy
Рахул
1
Последняя строка должна быть запрещена, потому что колесо уже установлено. Вы запускали это с --upgrade? Если кто-нибудь сможет создать минимальный Dockerfile, начиная с Ubuntu 18.04, это будет золотой стандарт.
10
51

Эта проблема связана с:

  • старая версия pip (6.1.1), устанавливаемая для Python 2.7
  • несколько копий Python 2.7, установленных на образе Trusty Beta
  • другое место для 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
nokome
источник
8
В моем случае sudo -H pip install setuptools --upgradeрешена проблема.
Мартин Тома
2
@MartinThoma Спасибо за ваш совет. У меня сработало после выпускаsudo -H pip install wheel --upgrade
Тарик
В моем случае достаточно было обновить пипс с 9.0.1 до 20.0.2
Сейф
45

Если у вас уже установлены все необходимые модули, вам, вероятно, нужно импортировать setuptoolsмодуль в ваш setup.pyфайл. Так что просто добавьте следующую строку в начале setup.pyфайла.

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

Это также упоминается в документации колеса. https://wheel.readthedocs.io/en/stable/#usage

Kasramvd
источник
6
Это сработало для меня. Я использовал distutils вместо setuptools для установки, и у меня уже был установлен пакет wheel.
Алекс Кашински
26

Эта ошибка странная, так как многие предложили ответы и получили смешанные решения. Я попробовал их, добавить их. Это было только когда я добавил pip install --upgrade pipокончательно убранную для меня ошибку. Но у меня нет времени, чтобы выделить, который есть что, так что это просто к вашему сведению.

truthadjustr
источник
23

в моем случае версия wheel / pip / setuptools, созданная venv, слишком старая. это работает:

venv/bin/pip  install --upgrade pip wheel setuptools
wynemo
источник
11

Я уже wheelустановил, поэтому я попытался удалить и переустановить, и это решило проблему:

pip uninstall wheel
pip install wheel

Weird ...

Jerther
источник
FWIW Я только что столкнулся с этой ошибкой и удаление и повторная установка работали на меня
Винсент
8

Мое исправление было apt install python3-dev

7029279
источник
2
Да, и добавьте setup_requires=["wheel"]в свой setup.py
Пим Хейден,
6

По вашему setup.py, если у вас есть:

from distutils.core import setup

Затем измените его на

from setuptools import setup

Затем заново создайте свой virtualenv и повторите команду, и она должна работать.

Филипп Реми
источник
1
Это решает мою проблему. Спасибо. +1
Хай Ву
5

Попробуйте изменить файл setup.py, импортировав setup из setuptools вместо distutils.core

Шубхам Ладдха
источник
Работал на меня! Я переносил пакет из Python2 в Python3 и, к сожалению, не смог найти для этого руководства. Любой, кто делает то же самое и разочаровывается в этой проблеме, может сделать это за вас!
Skytreader
4

Я сделал apt-get install python3-devв своем Ubuntu и добавил setup_requires=["wheel"]вsetup.py

Rohit.007
источник
11
Этого может быть достаточно, чтобы бежать pip install wheel.
Кап
1

Используя Ubuntu 18.04, эту проблему можно решить, установив python3-wheelпакет.

Обычно это устанавливается как зависимость от любого пакета Python. Но особенно когда вы создаете образы контейнеров, с которыми вы часто работаете, --no-install-recommendsи поэтому их часто не хватает, и их нужно сначала установить вручную.

Кристиан Берендт
источник
0

Не относится к Travis CI, но я столкнулся с подобной проблемой, пытаясь установить jupyterна свой Mac OSX 10.8.5, и ни один из других ответов не помог. Проблема была вызвана созданием «колеса» для вызываемого пакета pyzmqс сообщениями об ошибках, заполняющими сотни страниц.

Решение, которое я нашел, состояло в том, чтобы непосредственно установить старую версию этого пакета:

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

После этого установка jupyterпрошла без ошибок.

Дмитрий Зайцев
источник
0

Если вы используете 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
sodimel
источник