Questa è una domanda davvero popolare qui a SO, ma nessuna delle molte risposte che ho esaminato spiega chiaramente cosa significhi veramente questo errore e perché si verifica.
Una fonte di confusione è che quando (ad esempio) lo fai pip install pycparser
, ricevi per la prima volta l'errore:
Failed building wheel for pycparser
che è poi seguito dal messaggio che il pacchetto era:
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
Che cosa sta succedendo qui?
(Vorrei capire come qualcosa può fallire ma viene comunque installato e se puoi fidarti che questo pacchetto funzioni correttamente?)
Finora la migliore spiegazione parziale che ho trovato è questa .
pip
non trova una ruota per il requisito, scarica la dist sorgente e cerca di costruirla localmente. in caso di successo, la ruota viene memorizzata nellapip
cache di per future reinstallazioni. in caso di errore di compilazione della ruota,pip
passa all'installazione legacy dalla dist sorgente (invocandopython setup.py install
).