Zum Inhalt springen
QGIS
Fehlerbehebung

QGIS: DLL load failed beim Import von _C [Gelöst]

Veröffentlicht am Aktualisiert am

ImportError: DLL load failed while importing _C bedeutet, dass Windows PyTorch gefunden und anschließend das Laden einer der darunterliegenden kompilierten DLLs verweigert hat. Der Fehler tritt in QGIS auf, nachdem ein plugin torch in der QGIS-Python-Umgebung installiert hat, auch unseres. Installieren Sie das Microsoft Visual C++ Redistributable (x64) und starten Sie Windows neu. Das behebt den Fehler auf den meisten Rechnern.

Traceback (most recent call last):
  File "C:\...\site-packages\torch\__init__.py", line 141, in <module>
    raise err
OSError: [WinError 126] The specified module could not be found.
Error loading "C:\...\site-packages\torch\lib\fbgemm.dll" or one of its dependencies.

ImportError: DLL load failed while importing _C: The specified module could not be found.

Auf manchen Rechnern nennt derselbe Fehler eine andere Datei. Die Lösungen unten sind dieselben:

Error loading "C:\...\site-packages\torch\lib\shm.dll" or one of its dependencies.

Das betrifft Windows 10 und 11, QGIS 3.22 und höher sowie PyTorch 2.4.0 bis 2.8.0, also die Windows wheels, die fbgemm.dll enthalten. Version 2.9.0 enthält diese Datei nicht mehr.

Wenn Ihr Fehler statt 126 [WinError 127] lautet, hören Sie hier auf. Das bedeutet, dass die DLL geladen wurde, aber ein darin enthaltenes Symbol fehlt. Es handelt sich um einen Versionskonflikt zwischen Paketen, nicht um diesen Fehler.

Die schnelle Lösung

Installieren Sie das Visual C++ Redistributable (x64)

Führen Sie vc_redist.x64.exe von aka.ms/vc14/vc_redist.x64.exe aus. Verwenden Sie x64, auch wenn x86 bereits installiert ist. Es handelt sich um separate Pakete, und torch benötigt x64.

Starten Sie Windows neu

Ein Neustart von Windows, nicht nur von QGIS. Der Installer erledigt einen Teil seiner Arbeit erst beim Neustart.

Suchen Sie nach einer zweiten Python-Installation

Führen Sie in einer Eingabeaufforderung where python aus. Mehr als ein Ergebnis bedeutet, dass eine Anaconda-, Miniconda- oder eigenständige Python-Installation mit der QGIS-Installation konkurriert.

Entfernen Sie diese Python-Installation aus dem PATH

Öffnen Sie Start, suchen Sie nach „Umgebungsvariablen“, wählen Sie „Systemumgebungsvariablen bearbeiten“, dann „Umgebungsvariablen“ und „Path“. Löschen Sie die Einträge für die Python-Installation, die Sie in QGIS nicht verwenden, und melden Sie sich anschließend von Windows ab und wieder an.

Wenn der Fehler unverändert bleibt, fahren Sie mit Lösung 2 fort.

Prüfen Sie, ob es funktioniert

Öffnen Sie die OSGeo4W Shell über den QGIS-Ordner im Startmenü und führen Sie Folgendes aus:

python -c "import torch; print(torch.__version__)"

Eine Versionsnummer in einer eigenen Zeile ohne Traceback darüber bedeutet, dass die DLLs geladen werden. Wiederholen Sie den Test nun dort, wo es darauf ankommt: in QGIS unter Plugins, dann in der Python-Konsole mit import torch. Eine stille Eingabeaufforderung dort ist das gewünschte Ergebnis. Wenn einer der beiden Durchläufe funktioniert und der andere fehlschlägt, verwenden sie unterschiedliche Python-Installationen. Gehen Sie deshalb zurück zu Schritt 3.

Lösung 2: Eine Abhängigkeit von fbgemm.dll fehlt

Auf manchen Rechnern ist das Redistributable installiert, aber libomp140.x86_64.dll fehlt trotzdem. Die dauerhafte Lösung besteht darin, auf PyTorch 2.9.0 oder höher zu wechseln. Diese Version enthält fbgemm.dll überhaupt nicht. Wenn Sie an eine ältere Version gebunden sind, berichten Nutzer im PyTorch-Tracker, dass das Kopieren von libomp140.x86_64.dll, die mit der kostenlosen Visual Studio Community-Installation geliefert wird, das Problem behebt. Das ist eine Übergangslösung, niemals eine Lösung des Maintainers, und kein PyTorch wheel enthält diese Datei. Laden Sie keine lose DLL von einer Download-Seite herunter.

Wenn der Fehler unverändert bleibt, fahren Sie mit Lösung 3 fort.

Lösung 3: Das wheel passt nicht zum Rechner

Ein CUDA-Build auf einem Rechner ohne passenden NVIDIA-Treiber schlägt in derselben Zeile fehl. Wenn keine NVIDIA GPU vorhanden ist, erzwingen Sie den CPU-Build:

pip install --force-reinstall torch --index-url https://download.pytorch.org/whl/cpu

Wenn eine GPU vorhanden ist, verwenden Sie den Befehl, den die PyTorch-Installationsseite für Ihre CUDA-Version angibt. Installieren Sie torch in einer conda-Umgebung mit conda statt mit pip, damit die Laufzeitbibliotheken aus derselben Quelle wie das Paket kommen.

Wenn der Fehler unverändert bleibt, fahren Sie mit Lösung 4 fort.

Lösung 4: Das Antivirenprogramm hat nach der Installation eine Datei entfernt

Öffnen Sie Windows-Sicherheit, dann Viren- und Bedrohungsschutz und anschließend Schutzverlauf. Stellen Sie alles wieder her, was aus Ihrem site-packages-Ordner entfernt wurde, fügen Sie diesen Ordner zu den Ausschlüssen hinzu und installieren Sie torch anschließend neu. Die Installation meldet Erfolg, und der Ordner sieht weiterhin vollständig aus. Deshalb gibt auf dem Bildschirm nichts direkt einen Hinweis auf diese Ursache.

Wenn der Fehler unverändert bleibt, fahren Sie unten mit „Noch immer nicht behoben?“ fort.

Warum das passiert

PyTorch liefert kompilierte DLLs statt reinem Python. fbgemm.dll und die benachbarten Dateien in torch/lib sind mit der Microsoft C-Laufzeitumgebung verknüpft. Windows verweigert das Laden einer DLL, wenn es deren eigene Abhängigkeiten nicht finden kann. Der Fehler wird am Anfang der Kette bei _C gemeldet, dem torch-Erweiterungsmodul, das den Import ausführt. Deshalb nennt die Meldung eine Datei, die direkt auf der Festplatte liegt.

Die zweite Ursache ist Python 3.8. Seit dieser Version werden nur die Systempfade, das Verzeichnis mit der DLL- oder PYD-Datei und Verzeichnisse durchsucht, die mit add_dll_directory() hinzugefügt wurden. PATH und das aktuelle Arbeitsverzeichnis werden überhaupt nicht mehr verwendet. Ein Rechner mit Anaconda und QGIS kann dem Loader daher ein torch/lib aus der falschen Python-Installation übergeben, und der Fehler sagt nicht, welche ausgewählt wurde. Starten Sie QGIS über die eigene Verknüpfung im Startmenü, niemals aus einer Shell, in der Sie zuvor conda activate ausgeführt haben.

Noch immer nicht behoben?

AI Segmentation ist unser plugin, das PyTorch in der QGIS-Python-Umgebung installiert. Es kann Ihnen diesen Fehler daher anzeigen. Die Cloud-Modi führen die Modelle auf unseren Servern aus und benötigen kein lokales torch. Das behebt torch jedoch nicht für ein anderes plugin, das es lokal benötigt. Senden Sie die QGIS-Version, den vollständigen Traceback und die plugin-Version an stephane.barbot@terra-lab.ai. Wir sagen Ihnen, welche der vier Ursachen zutrifft.

Häufige Fragen

Warum nennt der Fehler _C, wenn die fehlende Datei fbgemm.dll ist?

_C ist das torch-Erweiterungsmodul, das den Import ausführt. Es steht daher an der Spitze der Kette, und Windows meldet den Fehler dort. Die in der Zeile darüber genannte Datei, fbgemm.dll oder shm.dll, ist normalerweise auf der Festplatte vorhanden. Was diese Datei benötigt, fehlt jedoch.

Welche PyTorch-Versionen sind betroffen?

Die Windows wheels von 2.4.0 bis 2.8.0 enthalten fbgemm.dll. Version 2.9.0 enthält sie nicht mehr. Ein Upgrade beseitigt daher diesen speziellen Fehler. Die _C-Meldung kann weiterhin aus einem anderen Grund erscheinen, etwa durch einen CUDA-Build auf einem Rechner ohne passenden Treiber.

Was ist der Unterschied zwischen WinError 126 und WinError 127?

126 bedeutet, dass Windows das Modul oder eine seiner Abhängigkeiten nicht finden konnte. Das ist dieser Fehler. 127 bedeutet, dass die DLL geladen wurde, aber ein darin enthaltenes Symbol fehlt. Das ist ein Versionskonflikt zwischen zwei Paketen. Keine der oben genannten Lösungen hilft bei 127.

Kann ich libomp140.x86_64.dll von einer DLL-Seite herunterladen?

Nein. Beziehen Sie die Datei aus der kostenlosen Visual Studio Community-Installation. Von dort stammt sie bei den Nutzern, die die Übergangslösung im PyTorch-Tracker melden. Eine Kopie von einer Download-Seite ist nicht dieselbe Datei, und kein PyTorch Windows wheel enthält sie ohnehin.

Wenn dieselbe Meldung bei GDAL auftritt, bietet die Version dieses Fehlers für _gdal eigene Lösungen. Was AI in QGIS nach dem Laden von torch ermöglicht, erfahren Sie im QGIS AI-Hub.