C'est une question très populaire ici à SO, mais aucune des nombreuses réponses que j'ai examinées n'explique clairement ce que cette erreur signifie vraiment et pourquoi elle se produit.
Une source de confusion est que lorsque (par exemple) vous faites _pip install pycparser
_, vous obtenez d’abord l’erreur:
Failed building wheel for pycparser
qui est ensuite suivi du message que le paquet était:
Successfully installed pycparser-2.19
.
_# pip3 install pycparser
Collecting pycparser
Using cached https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz
Building wheels for collected packages: pycparser
Running setup.py bdist_wheel for pycparser ... error
Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-g_v28hpp/pycparser/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/pip-wheel-__w_f6p0 --python-tag cp36:
Traceback (most recent call last):
File "<string>", line 1, in <module>
...
File "/usr/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2349, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
ModuleNotFoundError: No module named 'wheel.bdist_wheel'
----------------------------------------
Failed building wheel for pycparser
Running setup.py clean for pycparser
Failed to build pycparser
Installing collected packages: pycparser
Running setup.py install for pycparser ... done
Successfully installed pycparser-2.19
_
Que se passe-t-il ici?
(J'aimerais comprendre comment quelque chose peut échouer tout en restant installé et si vous pouvez faire confiance au bon fonctionnement de ce paquet?)
Jusqu'ici, la meilleure explication partielle que j'ai trouvée est this .
BTW/Solution :
La solution au problème ci-dessus consiste le plus souvent à désactiver la copie en cache en utilisant: pip install <package> --no-cache-dir
.
Depuis, personne ne semble le mentionner moi-même. Ma propre solution au problème ci-dessus consiste le plus souvent à désactiver la copie en cache en utilisant: pip install <package> --no-cache-dir
=.
Hier, j'ai eu la même erreur: Failed building wheel for hddfancontrol
quand j'ai exécuté pip3 install hddfancontrol
. Le résultat était Failed to build hddfancontrol
. La cause était error: invalid command 'bdist_wheel'
et Running setup.py bdist_wheel for hddfancontrol ... error
. L'erreur a été corrigée en exécutant ce qui suit:
pip3 install wheel
(De ici .)
Alternativement, la "roue" peut être téléchargée directement de ici . Une fois téléchargé, il peut être installé en lançant:
pip3 install "/the/file_path/to/wheel-0.32.3-py2.py3-none-any.whl"
(mainteneur pip ici!)
Si le paquet n’est pas une roue, pip essaie de lui fabriquer une roue (via setup.py bdist_wheel
). Si cela échoue pour une raison quelconque, vous obtenez le message "Échec de la construction d'une roue pour pycparser" et pip revient à l'installation directement (via setup.py install
).
Une fois que nous avons une roue, pip peut l’installer en la déballant correctement. pip essaie d'installer des paquets via des roues aussi souvent que possible. Cela est dû aux nombreux avantages de l’utilisation de roues (comme des installations plus rapides, pouvant être mis en cache, ne pas exécuter de code à nouveau, etc.).
Votre message d'erreur est dû au paquetage manquant wheel
, qui contient la logique nécessaire pour construire les roues dans setup.py bdist_wheel
. (pip install wheel
peut résoudre ce problème.)
Ce qui précède est le comportement hérité qui est actuellement le comportement par défaut. nous passerons par défaut au PEP 517, à un moment donné, ce qui nous permettra d'adopter un processus basé sur des normes. Nous avons également des versions isolées pour cela, donc vous devez installer Wheel dans ces environnements par défaut. :)
Il peut être utile de répondre à cette question du point de vue du déploiement de packages.
Il existe de nombreux tutoriels expliquant comment publier un paquet dans PyPi. Voici un couple que j'ai utilisé;
Mon expérience est que la plupart de ces tutoriels vous ont seulement utilisé le .tar de la source, pas une roue. Ainsi, lors de l'installation de packages créés à l'aide de ces tutoriels, j'ai reçu l'erreur "Echec de la construction de la roue".
J'ai par la suite trouvé le lien sur PyPi vers la documentation Python _ de Software Foundation Documentation PSF . J'ai découvert que leur processus de configuration et de construction était légèrement différent, et incluait en effet la construction d'un fichier wheel.
Après avoir utilisé la méthode officiellement documentée, je n’ai plus reçu l’erreur lors de l’installation de mes paquets.
L'erreur peut donc simplement concerner la manière dont le développeur a empaqueté et déployé le projet. Aucun de nous n'est né en sachant utiliser PyPi, et s’ils tombaient sur le mauvais tutoriel - eh bien, vous pouvez remplir les espaces vides.
Je suis sûr que ce n'est pas la seule raison de l'erreur, mais je suis prêt à parier que c'est l'une des principales raisons.