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 pycparserzuerst 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 .
wheelPaket, sodass Sie pipkeine Räder aus Quelldists bauen können. Wenn Sie Gebäuderäder explizit deaktivieren möchten, verwenden Sie das --no-binaryFlag : 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 pipzu installierende Pakete keine Quelldistanz verfügbar ist , schlägt die Installation fehl.
--no-binaryWeist 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 pycparserPaket kein Rad ( *.whl) zugeordnet? Aber wie kann ich das a priori überprüfen ?
.tar.gzDatei vorhanden ist und es sich um die Quelldistribution auf PyPI handelt (ein Rad hätte eine .whlErweiterung)
pipfü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 Radpipfür zukünftige Neuinstallationen im Cache gespeichert . Wechselt bei einem Fehler beim Erstellen des Radspipvon Source Dist (Aufrufpython setup.py install) zur Legacy-Installation .