HOWTO · Python

Fehler: Ungültiger Befehl Bdist_wheel in Python

Dieses Tutorial wird Ihnen beibringen, den Fehler ungültiger Befehl bdist_wheel in Python zu beheben.

Auf dieser Seite

Die Meldung error: invalid command 'bdist_wheel' bedeutet in der Regel, dass der Build-Prozess den Wheel-Befehl in der Python-Umgebung, in der setup.py ausgeführt wird, nicht findet. Installieren Sie zuerst wheel genau in dieser Umgebung. Ein Upgrade von pip ist ein späterer Schritt zur Fehlersuche und keine garantierte Lösung.

Prüfen, warum bdist_wheel nicht verfügbar ist

bdist_wheel ist ein Build-Befehl von setuptools, der vom Paket wheel bereitgestellt wird. Häufig fehlt wheel im Interpreter, der für den Build verwendet wird, oder es wurde über das pip eines anderen Interpreters installiert. Prüfen Sie, welches Python und welches pip Ihre Shell auflöst, und verwenden Sie anschließend für die Installation und den älteren Build-Befehl denselben Interpreter. python -m pip --version zeigt beispielsweise, welches pip zu python gehört. Wenn Ihr Projekt mit python3 ausgeführt wird, verwenden Sie diesen Interpreter in beiden Befehlen.

Der Befehl python setup.py bdist_wheel gehört zu einem älteren Paketierungsablauf. Bei einem Projekt, das ihn noch verwendet, zeigt der nächste Abschnitt die direkte Abhilfe. Verwenden Sie bei neueren Paketierungsabläufen stattdessen den vom Projekt dokumentierten Build-Prozess; gehen Sie nicht automatisch davon aus, dass dieser Befehl dafür gilt.

wheel in der aktiven Python-Umgebung installieren

Installieren Sie das Paket mit python -m pip install wheel, damit pip zum ausgewählten python-Interpreter gehört. Wenn Sie den Build mit python3 ausführen, verwenden Sie python3 -m pip install wheel. In einer aktivierten virtuellen Umgebung verwenden Sie deren python auf dieselbe Weise. Wiederholen Sie anschließend den Build mit python setup.py bdist_wheel oder dem entsprechenden Befehl für python3. Vermeiden Sie einen alleinstehenden pip-Befehl, wenn Sie nicht sicher sind, auf welchen Interpreter er zielt.

Das kurze Programm unten gibt die zusammengehörigen Befehle für den Python-Interpreter aus, mit dem es ausgeführt wird. Es veranschaulicht die Auswahl der Befehle; es installiert weder ein Paket noch erstellt es eine Distribution.

import sys

python = sys.executable
print(f"{python} -m pip install wheel")
print(f"{python} setup.py bdist_wheel")

Falls der Build weiterhin meldet, dass bdist_wheel nicht verfügbar ist, vergewissern Sie sich, dass Installations- und Build-Befehl denselben Interpreter verwenden und dass die virtuelle Umgebung in der Shell aktiviert ist, in der Sie die Befehle ausführen. Mit python -m pip show wheel können Sie prüfen, in welcher Umgebung das Paket installiert ist. Kontrollieren Sie, ob die angezeigte Umgebung derjenigen entspricht, für die Sie den Build ausführen möchten.

setup.py prüfen und Build-Werkzeuge aktualisieren

Wenn die Prüfung der Umgebung nichts ergibt und der Fehler bestehen bleibt, untersuchen Sie setup.py. Projekte mit dem älteren Import aus distutils.core können zu setuptools wechseln: Importieren Sie in setup.py setup mit from setuptools import setup und rufen Sie die Funktion anschließend mit den Projektmetadaten auf, zum Beispiel mit setup(name="example-package", version="1.0"). Dies veranschaulicht eine Konfiguration und ist kein vollständiger Projekt-Build. Das Paket setuptools muss in derselben Umgebung verfügbar sein. Installieren Sie es bei Bedarf dort mit python -m pip install setuptools.

Erst nachdem Sie den Interpreter und die installierten Pakete geprüft haben, sollten Sie ein Upgrade der Build-Werkzeuge erwägen: python -m pip install --upgrade pip setuptools wheel. Ein Upgrade kann bei einer veralteten oder inkonsistenten Umgebung helfen, behebt aber nicht, dass ein Befehl mit dem falschen Python ausgeführt wird. Die Einstellung setup_requires=['wheel'] ersetzt nicht die Korrektur der aktiven Build-Umgebung. Windows-C++-Build-Werkzeuge sind relevant, wenn ein Paket nativen Code kompilieren muss; für sich genommen stellen sie den fehlenden Befehl bdist_wheel nicht bereit.