Pourquoi ne puis-je pas créer une roue en python?

190

Voici les commandes que j'exécute:

$ python 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'

$ pip --version
pip 1.5.6 from /usr/local/lib/python3.4/site-packages (python 3.4)

$ python -c "import setuptools; print(setuptools.__version__)"
2.1

$ python --version
Python 3.4.1

$ which python
/usr/local/bin/python

De plus, j'utilise un mac avec python homebrewed

Voici mon script setup.py: https://gist.github.com/cloudformdesign/4791c46fe7cd52eb61cd

Je deviens complètement fou - je ne peux pas comprendre pourquoi cela ne fonctionnerait pas.

vitiral
la source
2
Et vous avez installé le wheelpackage comme le conseille la réponse de Thomas?
Martijn Pieters
1
J'ai le même problème. Mais il semble que je n'ai pas utilisé sudo avant la recommandation. Après avoir utilisé la recommandation avec l'autorisation d'administrateur. ça a marché.
chasseur

Réponses:

301

Installez d'abord le wheelpackage :

pip install wheel

La documentation n'est pas très claire à ce sujet, mais "le projet wheel fournit une commande bdist_wheel pour setuptools" signifie en fait "le paquet wheel ..." .

Thomas Orozco
la source
1
Donc, cela crache le fichier: nioblocks-1.01-cp34-cp34m-macosx_10_9_x86_64.whl - cela fonctionnera-t-il avec n'importe quel système d'exploitation, ou y a-t-il autre chose que je dois faire pour le faire fonctionner? (le "paquet" est juste un tas de dépendances pour pip à installer maintenant)
vitiral
1
@GarrettLinux Je ne sais pas, je suis désolé, mais je vous encourage à poser une question distincte pour cela; )
Thomas Orozco
1
J'ai également corrigé ce problème - l'ajout de n'importe quel fichier au fichier setup.py lui a donné une roue générale. Consultez le code mis à jour dans ma question par exemple.
vitiral
Vous pouvez obtenir l'erreur de l'OP même avec la roue installée, si setup.py utilise d'une manière ou d'une autre distutils au lieu de setuptools (comme c'était le cas pour moi), voir la réponse de geographika.
Oliver
4
Pour moi, le problème était l'ancienne version de pip. fixé parpip install --upgrade pip
Ryu_hayabusa
167

J'ai aussi rencontré le message d'erreur invalid command 'bdist_wheel'

Il s'avère que le package setup.py utilisait distutils plutôt que setuptools. Le changer comme suit m'a permis de construire la roue.

#from distutils.core import setup
from setuptools import setup
Geographika
la source
1
oui, j'ai eu ce problème à un moment aussi! Très important et le message d'erreur est médiocre.
vitiral
@geographika oui c'est la commande aussi la documentation sur docs.python.org/2/distutils/setupscript.html reproduirait les problèmes que vous voyez car elle utilise des disutils
JamesD
3
Peut également être nécessaire de changer from distutils.core import Extension, Commandd' from setuptools import Extension, Commandau moins pour le paquet que je travaillais avec.
eseglem
J'ai eu cette erreur pour pycrypto et il n'importait même pas la configuration. Cependant, j'ai ajouté from setuptools import setupau début et cela a résolu le problème.
haridsv
38

Mettez également à jour vos setuptools.

pip install setuptools --upgrade

Si cela échoue également, vous pouvez essayer avec un --forceindicateur supplémentaire .

chanceydonald
la source
1
mon setuptools a été supprimé ou quelque chose n'allait pas. J'ai donc dû faire: pip installer setuptools --upgrade --force
nycynik
12

J'ai aussi rencontré cela tout d'un coup, après que cela ait fonctionné auparavant, et c'était parce que j'étais à l'intérieur d'un virtualenv et que je wheeln'étais pas installé dans virtualenv.

jbg
la source
8

Mettez à jour votre pippremier:

pip install --upgrade pip

pour Python 3:

pip3 install --upgrade pip
Tombart
la source
C'est la réponse la plus utile maintenant. Les nouvelles versions de pip install n'utilisent pas bdist_wheel, donc la mise à niveau de pip a fonctionné pour moi, sans avoir besoin d'installer / mettre à jour setuptools ou wheel
theferrit32
4

Il se peut également que vous n'ayez qu'un système python3. Vous avez donc installé les packages nécessaires via pip3 install, comme pip3 install wheel .

Vous devrez créer vos trucs en utilisant spécifiquement python3.

python3 setup.py sdist
python3 setup.py bdist_wheel

À votre santé.

Bart Dorlandt
la source
4

Ajouter une autre réponse: essayez de vérifier votre PYTHONPATH.

Tout d'abord, essayez d'installer à wheelnouveau:

pip install wheel

Cela devrait vous dire où la roue est installée, par exemple:

Requirement already satisfied: wheel in /usr/local/lib/python3.5/dist-packages

Ajoutez ensuite l'emplacement de la roue à votre PYTHONPATH:

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python3.5/dist-packages/wheel

Maintenant, la construction d'une roue devrait fonctionner correctement.

python setup.py bdist_wheel
avidreader610
la source
2

J'ai essayé tout ce qui a été dit ici sans aucune chance, mais j'ai trouvé une solution de contournement. Après avoir exécuté cette commande (et échoué):bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

Allez dans le répertoire temporaire créé par l'outil (indiqué dans la sortie de la dernière commande), puis exécutez python setup.py bdist_wheel. Le .whlfichier est dans le distdossier.

Aigrefin
la source