Warum sagt python setup.py auf Travis CI den ungültigen Befehl 'bdist_wheel'?

330

Mein Python-Paket hat eine, setup.pydie lokal auf Ubuntu Trusty und auf einer neuen Vagrant Ubuntu Trusty-VM gut funktioniert, wenn ich sie wie folgt bereitstelle:

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

Aber wenn ich dasselbe auf einer Travis CI Trusty Beta-VM mache:

- 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

Ich bekomme:

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'

Das Warum kann ich nicht ein Rad in Python erstellen? ist verwandt, aber beachten Sie, dass ich Rad installiere und Setuptools aktualisiere.

nokome
quelle

Antworten:

467

Musste das wheelPaket installieren . Alles war auf dem neuesten Stand, gab aber immer noch den Fehler.

pip install wheel

dann

python setup.py bdist_wheel 

Arbeitete ohne Probleme.

frmdstryr
quelle
59
"Pip Install Wheel" ist manchmal genug
Oxidworks
20
ich brauchte pip3 install wheel - weil ich schon ein Rad installiert hatte, pipaber nicht pip3.
TetraDev
2
Das hat funktioniert aber nachdem pip install wheelich musstepip uninstall -r requirements.txt und wiederholenpip install -r requirements.txt
simple_code
9
can't open file 'setup.py': [Errno 2] No such file or directory
Cerin
4
Gibt es eine Möglichkeit zur automatischen Installation wheelin einer sauberen virtuellen Umgebung? python3 -m venv --system-site-packagesfügt zu viele Pakete hinzu.
Tobias Sette
82
pip install wheel

hat für mich gearbeitet, aber Sie können dies auch hinzufügen

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

zu setup.py und speichern Sie sich einen pip install Befehl

Nathaniel Gentile
quelle
2
Diese Leute haben bereits ein Rad installiert und erhalten immer noch den Fehler setup_requires=['wheel'], um diesen Fehler zu
beseitigen
1
Dies funktioniert nicht wie erwartet: 1 - zunächst funktioniert es nur, weil wir wheelmit pip installiert haben . Bei einer Neuinstallation 2 schlägt dies erneut fehl. In der Dokumentation heißt es: "Hinweis: In setup_requires aufgeführte Projekte werden NICHT automatisch auf dem System installiert, auf dem das Setup-Skript ausgeführt wird."
Tobias Sette
Nicht nur das, @TobiasSette, sondern derselbe Dokumentationslink lautet: "Warnung Die Verwendung von setup_requires wird zugunsten von PEP-518 nicht empfohlen."
Jeff Wright
71

Jan 2020

2 Stunden verschwendet.

In einem AWS Ubuntu 18.04 new machinesind folgende Installationen erforderlich:

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

Besonders die letzte Zeile ist ein Muss.
Vor 3 Zeilen können jedoch als Voraussetzungen erforderlich sein.

Ich hoffe, das hilft.

Manohar Reddy Poreddy
quelle
2
Genau ein Jahr später, und Sie haben mir viel Mühe erspart. Vielen Dank.
DaveTheMinion
7
Ich habe --no-install-recommendsin einem Docker-Image ( DL3015 ) verwendet und auf diesen Fehler gestoßen , musste ich explizit installieren python3-wheel. Vielen Dank!
dimo414
Gut zu wissen, dass es geholfen hat, meine war in einer virtuellen Umgebung (venv).
Manohar Reddy Poreddy
1
hat mir Stunden gespart! Vielen Dank @ManoharReddyPoreddy
Rahul
1
Die letzte Zeile sollte ein No-Op sein, da das Rad bereits installiert ist. Hast du es mit ausgeführt --upgrade? Wenn jemand in der Lage ist, ab Ubuntu 18.04 eine minimale Docker-Datei zu erstellen, wäre dies der Goldstandard.
9.
51

Dieses Problem ist zurückzuführen auf:

  • Eine alte Version von pip (6.1.1) wird für Python 2.7 installiert
  • Mehrere Kopien von Python 2.7 sind auf dem Trusty Beta-Image installiert
  • ein anderer Speicherort für Python 2.7, für den verwendet wird sudo

Es ist alles etwas kompliziert und hier besser erklärt https://github.com/travis-ci/travis-ci/issues/4989 .

Meine Lösung bestand darin, mit dem Benutzer zu installieren, travisanstatt sudo:

- pip2.7 install --upgrade --user travis pip setuptools wheel virtualenv
nokome
quelle
8
In meinem Fall sudo -H pip install setuptools --upgradedas Problem gelöst.
Martin Thoma
2
@ MartinThoma Danke für deinen Tipp. Es hat bei mir nach der Ausgabe funktioniertsudo -H pip install wheel --upgrade
Tarik
In meinem Fall war es ausreichend, pip zu aktualisieren, von 9.0.1 auf 20.0.2
Seyf
45

Wenn Sie bereits alle erforderlichen Module installiert haben, müssen Sie das setuptoolsModul wahrscheinlich in Ihre setup.pyDatei importieren . Fügen Sie einfach die folgende Zeile am Anfang der setup.pyDatei hinzu.

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

Dies wird auch in der Dokumentation des Rades erwähnt. https://wheel.readthedocs.io/en/stable/#usage

Kasramvd
quelle
6
Das hat bei mir funktioniert. Ich habe für das Setup Distutils anstelle von Setuptools verwendet und das Radpaket bereits installiert.
Alex Kaszynski
26

Dieser Fehler ist seltsam, da viele Antworten vorgeschlagen und gemischte Lösungen erhalten haben. Ich habe es versucht, füge sie hinzu. Erst als ich hinzufügte pip install --upgrade pip, wurde der Fehler endgültig für mich beseitigt. Aber ich habe keine Zeit zu isolieren, welches welches ist, also ist dies nur zu Ihrer Information.

trueadjustr
quelle
23

In meinem Fall ist die von venv erstellte Version von Wheel / Pip / Setuptools zu alt. das funktioniert:

venv/bin/pip  install --upgrade pip wheel setuptools
Wynemo
quelle
11

Ich hatte bereits wheelinstalliert, also habe ich versucht, zu deinstallieren und neu zu installieren, und das Problem wurde behoben:

pip uninstall wheel
pip install wheel

Seltsam...

Jerther
quelle
FWIW Ich bin gerade auf diesen Fehler gestoßen und die Deinstallation und Neuinstallation hat bei mir funktioniert
Vincent
8

Mein Fix war apt install python3-dev

7029279
quelle
2
Ja, und setup_requires=["wheel"]zu Ihrem setup.py hinzufügen
Pim Heijden
6

In Ihrem setup.py, wenn Sie haben:

from distutils.core import setup

Ändern Sie es dann in

from setuptools import setup

Erstellen Sie dann Ihre virtuelle Umgebung neu und führen Sie den Befehl erneut aus. Es sollte funktionieren.

Philippe Remy
quelle
1
Dies behebt mein Problem. Vielen Dank. +1
Hai Vu
@HaiVu willkommen :)
Philippe Remy
5

Versuchen Sie, die Datei setup.py zu ändern, indem Sie setup von setuptools anstelle von distutils.core importieren

Shubham Laddha
quelle
Hat für mich gearbeitet! Ich habe ein Paket von Python2 auf Python3 migriert und konnte leider keine Anleitung dafür finden. Jeder, der das Gleiche tut und mit diesem Problem frustriert ist, kann dies für Sie tun!
Skytreader
4

Ich habe apt-get install python3-devin meinem Ubuntu und fügte hinzu , setup_requires=["wheel"]insetup.py

Rohit.007
quelle
10
Es kann genug sein, um zu rennen pip install wheel.
Kap
1

Mit Ubuntu 18.04 kann dieses Problem durch Installation des python3-wheelPakets behoben werden .

Normalerweise wird dies als Abhängigkeit von einem Python-Paket installiert. Vor allem aber beim Erstellen von Container-Images, mit denen Sie häufig arbeiten, --no-install-recommendsfehlt es häufig und muss zuerst manuell installiert werden.

Christian Berendt
quelle
0

Nicht mit Travis CI verwandt, aber ich hatte ein ähnliches Problem beim Versuch, es jupyterauf meinem Mac OSX 10.8.5 zu installieren , und keine der anderen Antworten war hilfreich. Das Problem wurde durch das Erstellen des "Rads" für das aufgerufene Paket verursachtpyzmq , wobei Fehlermeldungen Hunderte von Seiten füllten.

Die Lösung, die ich gefunden habe, bestand darin, eine ältere Version dieses Pakets direkt zu installieren:

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

Danach war die Installation von jupyterohne Fehler erfolgreich.

Dmitri Zaitsev
quelle
0

Wenn Sie setup.cfgDateien verwenden, fügen Sie diese vor dem install_requireTeil hinzu:

setup_requires =
    wheel

Beispiel für ein setup.cfg-Projekt:

# 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
quelle