Perché python setup.py sta dicendo un comando non valido 'bdist_wheel' su Travis CI?


330

Il mio pacchetto Python ha un pacchetto setup.pyche si adatta perfettamente a livello locale su Ubuntu Trusty e su una nuova macchina virtuale Ubuntu Trusty Vagrant quando eseguo il provisioning in questo modo:

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

Ma quando faccio lo stesso su un 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

Ottengo:

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'

Questo Perché non posso creare una ruota in Python? è correlato ma nota che sto installando la ruota e aggiornando gli strumenti di configurazione.

Risposte:


471

Ho dovuto installare il wheelpacchetto. Tutto era aggiornato ma continuava a dare l'errore.

pip install wheel

poi

python setup.py bdist_wheel 

Ha funzionato senza problemi.


59
"pip install wheel" è a volte sufficiente
ossidazione

20
Ne avevo bisogno pip3 install wheel, perché avevo già installato la ruota pipma non pip3.
TetraDev,

2
Questo ha funzionato ma dopo che pip install wheelho dovuto pip uninstall -r requirements.txte rifattopip install -r requirements.txt
simple_code il

9
can't open file 'setup.py': [Errno 2] No such file or directory
Cerin,

4
C'è un modo per installare automaticamente wheelin un ambiente virtuale pulito? python3 -m venv --system-site-packagesaggiungerà troppi pacchetti.
Tobias Sette,

83
pip install wheel

ha funzionato per me, ma puoi anche aggiungere questo

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

su setup.py e salvati un comando di installazione pip


2
Quelle persone hanno già installato la ruota e continua a ottenere l'errore setup_requires=['wheel']per aggiungere questo errore
Shankar Pandala

1
Questo non funziona come previsto: 1 - all'inizio funziona solo perché abbiamo installato wheelcon pip. Fallirà nuovamente in un'installazione pulita 2 - la documentazione dice "Nota: i progetti elencati in setup_requires NON verranno installati automaticamente sul sistema in cui viene eseguito lo script di installazione".
Tobias Sette,

Non solo, @TobiasSette, ma lo stesso link alla documentazione dice: "Avvertimento L'uso di setup_requires è sconsigliato a favore di PEP-518".
Jeff Wright,

73

Gennaio 2020

2 ore sprecate.

Su un AWS Ubuntu 18.04 new machine, sono richieste le seguenti installazioni:

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

Soprattutto l'ultima riga è obbligatoria.
Tuttavia, prima di 3 righe potrebbero essere richieste come prerequisiti.

Spero che aiuti.


2
Esattamente un anno dopo, e mi hai risparmiato molte lotte. Grazie.
DaveTheMinion,

7
Stavo usando --no-install-recommendsun'immagine Docker ( DL3015 ) e mi sono imbattuto in questo errore, dovevo installarlo esplicitamente python3-wheel. Grazie!
dimo414,

Buono a sapersi che mi ha aiutato, il mio era in un ambiente virtuale (venv).
Manohar Reddy Poreddy

1
mi ha salvato ore! Grazie mille @ManoharReddyPoreddy
Rahul

1
L'ultima riga dovrebbe essere no-op, perché la ruota è già installata. L'hai eseguito con --upgrade? Se qualcuno fosse in grado di creare un Dockerfile minimo a partire da Ubuntu 18.04, questo sarebbe il gold standard.
l0b0

51

Questo problema è dovuto a:

  • una vecchia versione di pip (6.1.1) installata per Python 2.7
  • più copie di Python 2.7 installate sull'immagine Trusty Beta
  • una posizione diversa per Python 2.7 utilizzata sudo

È tutto un po 'complicato e meglio spiegato qui https://github.com/travis-ci/travis-ci/issues/4989 .

La mia soluzione era installare con l'utente travisanziché sudo:

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

8
Nel mio caso, sudo -H pip install setuptools --upgraderisolto il problema.
Martin Thoma,

2
@MartinThoma Grazie per il suggerimento. Ha funzionato per me dopo l'emissionesudo -H pip install wheel --upgrade
Tarik

L'aggiornamento di pip è stato sufficiente nel mio caso, dalla 9.0.1 alla 20.0.2
Seyf il

45

Se hai già installato tutti i moduli richiesti, probabilmente dovrai importare il setuptoolsmodulo nel tuo setup.pyfile. Quindi basta aggiungere la seguente riga all'inizio del setup.pyfile.

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

Questo è anche menzionato nella documentazione della ruota. https://wheel.readthedocs.io/en/stable/#usage


6
Questo ha funzionato per me. Stavo usando distutils invece di setuptools per la configurazione e avevo già installato il pacchetto ruote.
Alex Kaszynski,

26

Questo errore è strano come molte risposte proposte e ottenuto soluzioni contrastanti. Li ho provati, li ho aggiunti. È stato solo quando ho aggiunto pip install --upgrade pipfinalmente rimosso l'errore per me. Ma non ho tempo per isolare quale sia, quindi questo è solo un problema.


23

nel mio caso, la versione di wheel / pip / setuptools creata da venv è troppo vecchia. questo funziona:

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

11

Avevo già wheelinstallato, quindi ho provato a disinstallare e reinstallare e risolto il problema:

pip uninstall wheel
pip install wheel

Strano...


FWIW Ho appena riscontrato questo errore e la disinstallazione e la reinstallazione hanno funzionato per me
Vincent


6

Nel tuo setup.py, se hai:

from distutils.core import setup

Quindi, cambiarlo in

from setuptools import setup

Quindi ricrea il tuo virtualenv ed esegui nuovamente il comando, e dovrebbe funzionare.


1
Questo risolve il mio problema. Grazie. +1
Hai Vu,

5

Prova a modificare il file setup.py importando setup da setuptools invece di distutils.core


Ha funzionato per me! Stavo migrando un pacchetto da Python2 a Python3 e sfortunatamente non riuscivo a trovare una guida per questo. Chiunque faccia lo stesso e si senta frustrato da questo problema, questo potrebbe farlo per te!
skytreader

4

L'ho fatto apt-get install python3-devnel mio Ubuntu e aggiunsi setup_requires=["wheel"]insetup.py


11
Potrebbe essere sufficiente per l'esecuzione pip install wheel.
Kap il


1

Usando Ubuntu 18.04 questo problema può essere risolto installando il python3-wheelpacchetto.

Di solito questo è installato come dipendenza da qualsiasi pacchetto Python. Ma soprattutto quando si creano immagini di container con cui si lavora spesso --no-install-recommendse quindi spesso manca e deve essere installato manualmente per primo.


0

Non correlato a Travis CI ma ho riscontrato un problema simile nel tentativo di installare jupytersul mio Mac OSX 10.8.5 e nessuna delle altre risposte è stata di aiuto. Il problema era causato dalla costruzione della "ruota" per il pacchetto chiamato pyzmq, con messaggi di errore che riempivano centinaia di pagine.

La soluzione che ho trovato era installare direttamente una versione precedente di quel pacchetto:

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

Successivamente, l'installazione di è jupyterriuscita senza errori.


0

Se stai usando i setup.cfgfile, aggiungi questo prima della install_requireparte:

setup_requires =
    wheel

Esempio di progetto 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.