Dies ist eine wirklich beliebte Frage hier bei SO, aber keine der vielen Antworten, die ich mir angesehen habe, erklärt klar, was dieser Fehler wirklich bedeutet und warum er auftritt.
Eine Quelle der Verwirrung ist, dass Sie (zum Beispiel) pip install pycparser
zuerst den Fehler erhalten:
Failed building wheel for pycparser
Darauf folgt die Meldung, dass das Paket war:
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
Was geht hier vor sich?
(Ich möchte verstehen, wie etwas fehlschlagen kann, aber dennoch installiert wird und ob Sie darauf vertrauen können, dass dieses Paket ordnungsgemäß funktioniert?)
Bisher ist die beste teilweise Erklärung, die ich gefunden habe, diese .
wheel
Paket, sodass Sie pip
keine Räder aus Quelldists bauen können. Wenn Sie Gebäuderäder explizit deaktivieren möchten, verwenden Sie das --no-binary
Flag : pip install somepkg --no-binary=somepkg
. Oder verwenden Sie pip install somepkg --no-binary=:all:
, aber beachten Sie, dass dadurch die Räder für jedes für die Installation ausgewählte Paket deaktiviert werden, einschließlich der Abhängigkeiten. Wenn für einige pip
zu installierende Pakete keine Quelldistanz verfügbar ist , schlägt die Installation fehl.
--no-binary
Weist pip an, nur Quelldistributionen herunterzuladen und zu verwenden. Das Flag, um zu verhindern, dass ein lokales Binärrad erstellt wird, ist in der Tat --no-cache-dir
.
wheels
(0.32.2) also das ist nicht das problem. Aber vielleicht ist dem pycparser
Paket kein Rad ( *.whl
) zugeordnet? Aber wie kann ich das a priori überprüfen ?
.tar.gz
Datei vorhanden ist und es sich um die Quelldistribution auf PyPI handelt (ein Rad hätte eine .whl
Erweiterung)
pip
für die Anforderung kein Rad gefunden wird, lädt es die Quelldistanz herunter und versucht, lokal ein Rad daraus zu erstellen. Bei Erfolg wird das Radpip
für zukünftige Neuinstallationen im Cache gespeichert . Wechselt bei einem Fehler beim Erstellen des Radspip
von Source Dist (Aufrufpython setup.py install
) zur Legacy-Installation .