DLL load failed w QGIS: błąd importu _C (rozwiązanie)
Opublikowano Zaktualizowano
ImportError: DLL load failed while importing _C oznacza, że Windows znalazł PyTorch, a następnie odmówił załadowania jednej ze znajdujących się pod nim skompilowanych bibliotek DLL. Ten błąd pojawia się w QGIS po zainstalowaniu przez plugin torch w Pythonie QGIS, także w naszym pluginie. Zainstaluj Microsoft Visual C++ Redistributable (x64), a następnie uruchom ponownie Windows. Na większości maszyn to usuwa problem.
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.
Na niektórych maszynach ten sam problem wskazuje inną bibliotekę, ale rozwiązania są takie same:
Error loading "C:\...\site-packages\torch\lib\shm.dll" or one of its dependencies.
Dotyczy Windows 10 i 11, QGIS 3.22 i nowszych oraz PyTorch od 2.4.0 do 2.8.0, czyli wersji Windows, które zawierają fbgemm.dll. Wersja 2.9.0 nie zawiera już tego pliku.
Jeśli błąd zawiera [WinError 127] zamiast 126, zatrzymaj się tutaj. Oznacza to, że biblioteka DLL została załadowana, ale brakuje w niej symbolu. Jest to niezgodność wersji między pakietami, a nie ten problem.
Szybkie rozwiązanie
Zainstaluj Visual C++ Redistributable (x64)
Uruchom vc_redist.x64.exe z adresu aka.ms/vc14/vc_redist.x64.exe. Wybierz x64, nawet jeśli masz już x86. To osobne pakiety, a torch potrzebuje x64.
Restart Windows
Uruchom ponownie Windows, a nie tylko QGIS. Instalator kończy część pracy dopiero po ponownym uruchomieniu.
Sprawdź, czy masz drugi Python
W wierszu polecenia uruchom where python. Więcej niż jeden wynik oznacza, że Anaconda, Miniconda lub samodzielny Python konkuruje z Pythonem używanym przez QGIS.
Usuń ten Python ze zmiennej PATH
Otwórz Start, wpisz „zmienne środowiskowe”, wybierz Edytuj zmienne środowiskowe systemu, następnie Zmienne środowiskowe i Path. Usuń wpisy dotyczące Pythona, którego nie używasz w QGIS, a następnie wyloguj się z Windows i zaloguj ponownie.
Jeśli błąd się nie zmienił, przejdź do rozwiązania 2.
Sprawdź, czy zadziałało
Otwórz OSGeo4W Shell z folderu QGIS w menu Start i uruchom:
python -c "import torch; print(torch.__version__)"
Samodzielny numer wersji, bez wcześniejszego tracebacku, oznacza, że biblioteki DLL się ładują. Teraz powtórz test w miejscu, które ma znaczenie: w QGIS wybierz Wtyczki, następnie Konsola Python i uruchom import torch. Cichy prompt oznacza oczekiwany rezultat. Jeśli jeden test przechodzi, a drugi nie, oba używają różnych Pythonów, więc wróć do kroku 3.
Rozwiązanie 2: brakuje zależności fbgemm.dll
Na niektórych maszynach pakiet redystrybucyjny jest zainstalowany, ale nadal brakuje libomp140.x86_64.dll. Trwałym rozwiązaniem jest przejście na PyTorch 2.9.0 lub nowszy, który w ogóle nie zawiera fbgemm.dll. Jeśli musisz pozostać przy starszej wersji, użytkownicy zgłaszają na trackerze PyTorch, że skopiowanie libomp140.x86_64.dll, dostarczanego wraz z bezpłatnym Visual Studio Community, pozwala uruchomić torch. To obejście dla użytkownika, a nie poprawka maintainerów, i żaden wheel PyTorch nie zawiera tego pliku. Nie pobieraj luźnej biblioteki DLL z witryny z plikami do pobrania.
Jeśli błąd się nie zmienił, przejdź do rozwiązania 3.
Rozwiązanie 3: wheel nie pasuje do maszyny
Build CUDA na komputerze bez odpowiedniego sterownika NVIDIA kończy się błędem w tym samym miejscu. Jeśli nie masz GPU NVIDIA, wymuś build CPU:
pip install --force-reinstall torch --index-url https://download.pytorch.org/whl/cpu
Jeśli masz GPU, użyj polecenia podanego przez stronę instalacji PyTorch dla używanej wersji CUDA. W środowisku conda zainstaluj torch za pomocą conda zamiast pip, aby biblioteki runtime pochodziły z tego samego miejsca co pakiet.
Jeśli błąd się nie zmienił, przejdź do rozwiązania 4.
Rozwiązanie 4: program antywirusowy usunął plik po instalacji
Otwórz Zabezpieczenia Windows, następnie Ochronę przed wirusami i zagrożeniami, a potem Historię ochrony. Przywróć wszystko, co zostało usunięte z folderu site-packages, dodaj ten folder do wyjątków, a następnie zainstaluj torch ponownie. Instalacja zgłosiła sukces, a folder nadal wygląda na kompletny, więc nic na ekranie nie wskazuje na ten problem.
Jeśli błąd się nie zmienił, przejdź do sekcji Czy nadal nie działa? poniżej.
Dlaczego tak się dzieje
PyTorch dostarcza skompilowane biblioteki DLL, a nie wyłącznie kod Python. fbgemm.dll i inne biblioteki w torch/lib są powiązane z runtime Microsoft C, a Windows odmawia załadowania biblioteki DLL, gdy nie może znaleźć jej własnych zależności. Zgłasza błąd na początku łańcucha, przy _C, czyli module rozszerzenia torch wykonującym import. Dlatego komunikat wskazuje plik, który znajduje się na dysku dokładnie tam, gdzie powinien.
Drugą przyczyną jest Python 3.8. Od tej wersji wyszukiwane są wyłącznie ścieżki systemowe, katalog zawierający bibliotekę DLL lub plik PYD oraz katalogi dodane za pomocą add_dll_directory(). PATH i bieżący katalog roboczy nie są już w ogóle używane. Dlatego maszyna, na której znajdują się jednocześnie Anaconda i QGIS, może przekazać loaderowi torch/lib z niewłaściwego Pythona, a błąd nie mówi, który z nich został wybrany. Uruchamiaj QGIS z jego własnego skrótu w menu Start, nigdy z powłoki, w której wykonano conda activate.
Czy nadal nie działa?
AI Segmentation to nasz plugin, który instaluje PyTorch w Pythonie QGIS, więc właśnie on może wyświetlić ten błąd. Jego tryby chmurowe uruchamiają modele na naszych serwerach i nie wymagają lokalnego torch, ale nie naprawiają torch dla innych pluginów, które go potrzebują. Wyślij wersję QGIS, pełny traceback i wersję pluginu na adres stephane.barbot@terra-lab.ai. Powiemy Ci, które z czterech rozwiązań dotyczy Twojego przypadku.
Pytania, które często się pojawiają
Dlaczego błąd wskazuje _C, skoro brakuje pliku fbgemm.dll?
_C to moduł rozszerzenia torch wykonujący import, więc znajduje się na początku łańcucha i Windows zgłasza błąd właśnie tam. Plik wskazany w wierszu powyżej, fbgemm.dll lub shm.dll, zwykle znajduje się na dysku. Brakuje natomiast pliku, od którego ten plik zależy.
Które wersje PyTorch są dotknięte problemem?
Wheels Windows od wersji 2.4.0 do 2.8.0 zawierają fbgemm.dll. Wersja 2.9.0 nie zawiera już tego pliku, więc aktualizacja usuwa ten konkretny błąd. Komunikat _C może jednak nadal pojawić się z innego powodu, na przykład przy buildzie CUDA na maszynie bez odpowiedniego sterownika.
Jaka jest różnica między WinError 126 a WinError 127?
126 oznacza, że Windows nie mógł znaleźć modułu lub jednej z jego zależności. To właśnie ten problem. 127 oznacza, że biblioteka DLL została załadowana, ale brakuje w niej symbolu. Jest to niezgodność wersji między dwoma pakietami. Żadne z powyższych rozwiązań nie pomoże przy błędzie 127.
Czy mogę pobrać libomp140.x86_64.dll z witryny z bibliotekami DLL?
Nie. Pobierz ją z bezpłatnej instalacji Visual Studio Community. Stamtąd pochodzi plik używany przez osoby zgłaszające to obejście na trackerze PyTorch. Kopia z witryny z plikami do pobrania nie jest tym samym plikiem, a żaden wheel PyTorch Windows i tak go nie zawiera.
Jeśli zobaczysz taki sam komunikat przy GDAL, wersja tego błędu dotycząca _gdal zawiera własne rozwiązania. Informacje o tym, co AI w QGIS umożliwia po załadowaniu torch, znajdziesz w centrum QGIS AI.


