web-dev-qa-db-fra.com

Que signifie "Échec de la construction d'une roue pour X" dans l'installation de pip?

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.

30
not2qubit

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 =.

7
not2qubit

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"
14
Matthew Wai

(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. :)

9
pradyunsg

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é;

moyen
vrai python

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.

2
SteveJ