Pourquoi python setup.py dit une commande invalide 'bdist_wheel' sur Travis CI?

331

Mon package Python a un setup.pyqui se construit bien localement sur Ubuntu Trusty et sur une nouvelle machine virtuelle Vagrant Ubuntu Trusty lorsque je le provisionne comme ceci:

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

Mais quand je fais de même sur une VM Travis CI Trusty Beta:

- 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

Je reçois:

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'

Ceci Pourquoi ne puis-je pas créer une roue en python? est lié mais notez que j'installe la roue et que je mets à jour setuptools.

nokome
la source

Réponses:

471

J'ai dû installer le wheelpackage. Tout était à jour mais donnait toujours l'erreur.

pip install wheel

puis

python setup.py bdist_wheel 

Fonctionné sans problèmes.

frmdstryr
la source
59
"pip install wheel" suffit parfois
oxydworks
20
J'avais besoin pip3 install wheel- parce que j'avais déjà installé une roue, pipmais pas pip3.
TetraDev
2
Cela a fonctionné mais après pip install wheelje devais pip uninstall -r requirements.txtet refairepip install -r requirements.txt
simple_code
9
can't open file 'setup.py': [Errno 2] No such file or directory
Cerin
4
Existe-t-il un moyen d'installer automatiquement wheeldans un environnement virtuel propre? python3 -m venv --system-site-packagesajoutera trop de packages.
Tobias Sette
83
pip install wheel

travaillé pour moi, mais vous pouvez également ajouter ceci

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

à setup.py et enregistrez-vous une commande pip install

Nathaniel Gentile
la source
2
Ces personnes ont déjà installé la roue et toujours l'erreur peut s'ajouter setup_requires=['wheel']pour se débarrasser de cette erreur
Shankar Pandala
1
Cela ne fonctionne pas comme prévu: 1 - au début, cela ne fonctionne que parce que nous avons installé wheelavec pip. Il échouera à nouveau dans une installation propre 2 - la documentation indique "Remarque: les projets répertoriés dans setup_requires ne seront PAS automatiquement installés sur le système sur lequel le script d'installation est exécuté."
Tobias Sette
Non seulement cela, @TobiasSette, mais ce même lien de documentation dit: "Avertissement L'utilisation de setup_requires est déconseillée en faveur de PEP-518."
Jeff Wright
73

Janv.2020

2 heures perdues.

Sur un AWS Ubuntu 18.04 new machine, les installations ci-dessous sont requises:

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

Surtout la dernière ligne est incontournable.
Cependant, avant 3 lignes peuvent être nécessaires comme prérequis.

J'espère que cela pourra aider.

Manohar Reddy Poreddy
la source
2
Exactement un an plus tard, et vous m'avez sauvé beaucoup de difficultés. Je vous remercie.
DaveTheMinion
7
J'utilisais --no-install-recommendsdans une image Docker ( DL3015 ) et rencontrant cette erreur, j'avais besoin d'installer explicitement python3-wheel. Merci!
dimo414
Bon à savoir que cela a aidé, le mien était dans un environnement virtuel (venv).
Manohar Reddy Poreddy
1
m'a sauvé des heures! Merci beaucoup @ManoharReddyPoreddy
Rahul
1
La dernière ligne devrait être un no-op, car la roue est déjà installée. L'avez-vous exécuté avec --upgrade? Si quelqu'un est capable de créer un Dockerfile minimal à partir d'Ubuntu 18.04, ce serait l'étalon-or.
l0b0
51

Ce problème est dû à:

  • une ancienne version de pip (6.1.1) en cours d'installation pour Python 2.7
  • plusieurs copies de Python 2.7 installées sur l'image Trusty Beta
  • un emplacement différent pour Python 2.7 utilisé pour sudo

C'est un peu compliqué et mieux expliqué ici https://github.com/travis-ci/travis-ci/issues/4989 .

Ma solution était d'installer avec l'utilisateur travisau lieu de sudo:

- pip2.7 install --upgrade --user travis pip setuptools wheel virtualenv
nokome
la source
8
Dans mon cas, sudo -H pip install setuptools --upgraderésolu le problème.
Martin Thoma
2
@MartinThoma Merci pour votre conseil. Cela a fonctionné pour moi après l'émissionsudo -H pip install wheel --upgrade
Tarik
La mise à niveau de pip était suffisante dans mon cas, de 9.0.1 à 20.0.2
Seyf
45

Si vous avez déjà installé tous les modules requis, vous devrez probablement importer le setuptoolsmodule dans votre setup.pyfichier. Il suffit donc d'ajouter la ligne suivante au début du setup.pyfichier.

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

Ceci est également mentionné dans la documentation de wheel. https://wheel.readthedocs.io/en/stable/#usage

Kasramvd
la source
6
Cela a fonctionné pour moi. J'utilisais des distutils au lieu de setuptools pour la configuration et j'avais déjà installé le paquet de roues.
Alex Kaszynski
26

Cette erreur est bizarre car de nombreuses réponses proposées et des solutions mixtes ont été obtenues. Je les ai essayés, ajoutez-les. Ce n'est que lorsque j'ai ajouté a pip install --upgrade pipfinalement supprimé l'erreur pour moi. Mais je n'ai pas le temps d'isoler lequel est lequel, donc c'est juste fyi.

truthadjustr
la source
23

dans mon cas, la version de wheel / pip / setuptools créée par venv est trop ancienne. cela marche:

venv/bin/pip  install --upgrade pip wheel setuptools
wynemo
la source
11

J'avais déjà wheelinstallé donc j'ai essayé de désinstaller et réinstaller, et cela a résolu le problème:

pip uninstall wheel
pip install wheel

Bizarre...

Jerther
la source
FWIW Je viens de rencontrer cette erreur et la désinstallation et la réinstallation ont fonctionné pour moi
Vincent
8

Ma solution était apt install python3-dev

7029279
la source
2
Oui, et ajoutez setup_requires=["wheel"]à votre setup.py
Pim Heijden
6

Dans votre setup.py, si vous avez:

from distutils.core import setup

Ensuite, changez-le en

from setuptools import setup

Recréez ensuite votre virtualenv et réexécutez la commande, et cela devrait fonctionner.

Philippe Remy
la source
1
Cela résout mon problème. Je vous remercie. +1
Hai Vu
5

Essayez de modifier le fichier setup.py en important la configuration depuis setuptools au lieu de distutils.core

Shubham Laddha
la source
A travaillé pour moi! Je migrais un package de Python2 vers Python3 et malheureusement je n'ai pas pu trouver de guide pour cela. Quiconque fait de même et est frustré par ce problème, cela pourrait le faire pour vous!
skytreader
4

Je l' ai fait apt-get install python3-devdans mon Ubuntu et ajouté setup_requires=["wheel"]danssetup.py

Rohit.007
la source
11
Cela peut suffire à courir pip install wheel.
kap
1

En utilisant Ubuntu 18.04, ce problème peut être résolu en installant le python3-wheelpackage.

Habituellement, cela est installé en tant que dépendance sur n'importe quel package Python. Mais surtout lorsque vous créez des images de conteneurs avec lesquelles vous travaillez souvent, --no-install-recommendselles sont souvent manquantes et doivent d'abord être installées manuellement.

Christian Berendt
la source
0

Pas lié à Travis CI, mais j'ai rencontré un problème similaire en essayant d'installer jupytersur mon Mac OSX 10.8.5, et aucune des autres réponses n'a été utile. Le problème a été causé par la construction de la "roue" pour le package appelépyzmq , avec des messages d'erreur remplissant des centaines de pages.

La solution que j'ai trouvée était d'installer directement une ancienne version de ce package:

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

Après cela, l'installation de jupyterréussi sans erreur.

Dmitri Zaitsev
la source
0

Si vous utilisez des setup.cfgfichiers, ajoutez ceci avant la install_requirepartie:

setup_requires =
    wheel

Exemple de projet 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
la source