QGIS DLL load failed while importing _C 錯誤修正
發布於 更新於
ImportError: DLL load failed while importing _C 表示 Windows 找到了 PyTorch,接著卻拒絕載入其底層某個編譯 DLL。當外掛將 torch 安裝到 QGIS 的 Python 時,您可能會在 QGIS 遇到這個錯誤,我們的外掛也一樣。安裝 Microsoft Visual C++ Redistributable (x64),然後重新啟動 Windows:大多數電腦這樣就能清除錯誤。
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.
同一個故障在某些電腦上會指出不同檔案,但下列修正方式相同:
Error loading "C:\...\site-packages\torch\lib\shm.dll" or one of its dependencies.
適用於 Windows 10 和 11、QGIS 3.22 及後續版本,以及 PyTorch 2.4.0 到 2.8.0,亦即隨附 fbgemm.dll 的 Windows wheels。2.9.0 版本移除了該檔案。
如果您的錯誤顯示 [WinError 127] 而不是 126,請先停在這裡。這表示 DLL 已載入,但其中缺少某個符號,原因是套件之間的版本不相容,不是本文所述的錯誤。
快速修正
安裝 Visual C++ Redistributable (x64)
執行 aka.ms/vc14/vc_redist.x64.exe 中的 vc_redist.x64.exe。即使您已經安裝 x86,也要選擇 x64。兩者是分開的套件,而 torch 需要 x64。
重新啟動 Windows
這裡需要的是重新啟動電腦,不是重新啟動 QGIS。安裝程式會把部分工作留到重新啟動時完成。
檢查是否有第二個 Python
在命令提示字元中執行 where python。如果顯示多個結果,表示 Anaconda、Miniconda 或獨立安裝的 Python 正在與 QGIS 使用的 Python 競爭。
從 PATH 移除該 Python
開啟「開始」,搜尋「環境變數」,選取「編輯系統環境變數」,接著選取「環境變數」、「Path」。刪除您不在 QGIS 中使用的 Python 所對應的項目,然後登出 Windows 再重新登入。
如果錯誤沒有變化,請前往修正 2。
確認是否已修正
從「開始」選單的 QGIS 資料夾開啟 OSGeo4W Shell,然後執行:
python -c "import torch; print(torch.__version__)"
如果單獨一行顯示版本號,且上方沒有 traceback,表示 DLL 已成功載入。現在到真正需要使用它的地方重複測試:在 QGIS 中依序選取「外掛程式」→「Python 主控台」,然後執行 import torch。如果那裡顯示安靜的提示字元,就是您要的結果。如果兩個測試只有一個成功,表示它們使用的是不同的 Python,請回到第 3 步。
修正 2:fbgemm.dll 的相依項遺失
有些電腦已安裝 Redistributable,仍然缺少 libomp140.x86_64.dll。可長期採用的修正方式是升級到 PyTorch 2.9.0 或後續版本,該版本完全不再隨附 fbgemm.dll。如果您必須固定使用較舊版本,PyTorch tracker 上的使用者回報,將隨免費 Visual Studio Community 一起提供的 libomp140.x86_64.dll 複製進來後,就能正常執行。這只是使用者的因應做法,絕不是維護者修正,而且沒有任何 PyTorch wheel 會隨附這個檔案。不要從下載網站取得散裝 DLL。
如果錯誤沒有變化,請前往修正 3。
修正 3:wheel 與電腦不相容
在沒有相符 NVIDIA 驅動程式的電腦上,CUDA build 會在同一行失敗。如果沒有 NVIDIA GPU,請強制使用 CPU build:
pip install --force-reinstall torch --index-url https://download.pytorch.org/whl/cpu
如果有 GPU,請使用 PyTorch 安裝頁面針對您的 CUDA 版本提供的指令。在 conda 環境中,請使用 conda 而不是 pip 安裝 torch,讓執行階段函式庫與套件來自同一個位置。
如果錯誤沒有變化,請前往修正 4。
修正 4:防毒軟體在安裝後移除了檔案
開啟「Windows 安全性」,接著依序選取「病毒與威脅防護」、「保護歷程記錄」。還原它從您的 site-packages 資料夾中移除的任何檔案,將該資料夾加入排除項目,然後重新安裝 torch。安裝畫面顯示成功,資料夾看起來也仍然完整,因此畫面上不會直接指出這個原因。
如果錯誤沒有變化,請前往下方的「仍然無法修正?」。
為什麼會發生
PyTorch 提供的是編譯過的 DLL,而不是純 Python。fbgemm.dll 以及 torch/lib 中的相鄰檔案都連結到 Microsoft C runtime,而當 Windows 找不到某個 DLL 自己的相依項時,就會拒絕載入該 DLL。它會在相依鏈最上方的 _C 報告失敗。_C 是負責執行 import 的 torch extension module,因此錯誤訊息才會指出一個明明就在磁碟上的檔案。
第二個原因是 Python 3.8。從該版本開始,只會搜尋 system paths、存放 DLL 或 PYD 檔案的目錄,以及透過 add_dll_directory() 加入的目錄。PATH 和目前工作目錄完全不再使用。因此,同時安裝 Anaconda 和 QGIS 的電腦,可能會將錯誤 Python 的 torch/lib 交給載入器,而錯誤訊息不會告訴您它選中了哪一個。請從 QGIS 自己在「開始」選單中的捷徑啟動 QGIS,不要從曾經執行過 conda activate 的 shell 啟動。
仍然無法修正?
AI Segmentation 是我們提供的、會將 PyTorch 安裝到 QGIS 的 Python 的外掛,因此它最可能讓您遇到這個錯誤。它的雲端模式會在我們的伺服器上執行模型,不需要本機 torch,但這不會替任何其他需要 torch 的外掛修復 torch。請將 QGIS 版本、完整 traceback 以及外掛版本寄到 stephane.barbot@terra-lab.ai。我們會告訴您屬於四種修正方式中的哪一種。
常見問題
為什麼錯誤訊息指向 _C,但遺失的檔案是 fbgemm.dll?
_C 是負責執行 import 的 torch extension module,因此位於相依鏈最上方,Windows 會在那裡報告失敗。上一行指出的檔案 fbgemm.dll 或 shm.dll 通常確實存在於磁碟上。缺少的是該檔案所依賴的項目。
哪些 PyTorch 版本受到影響?
2.4.0 到 2.8.0 的 Windows wheels 都隨附 fbgemm.dll。2.9.0 版本移除了它,因此升級可以排除這個特定錯誤。_C 的錯誤訊息仍可能因其他原因出現,例如在沒有相符 driver 的電腦上使用 CUDA build。
WinError 126 和 WinError 127 有什麼差異?
126 表示 Windows 找不到該 module 或其相依項之一,這就是本文所述的錯誤。127 表示 DLL 已載入,但其中缺少某個 symbol,原因是兩個套件之間的版本不相容。上方任何修正方式都無法解決 127。
我可以從 DLL 網站下載 libomp140.x86_64.dll 嗎?
不可以。請從免費的 Visual Studio Community 安裝中取得。PyTorch tracker 上回報 workaround 的使用者,就是從那裡取得該檔案。下載網站提供的檔案不一定相同,而且任何 PyTorch Windows wheel 都不會隨附這個檔案。
如果您在 GDAL 上遇到相同錯誤訊息,_gdal 版本的這個錯誤有自己的修正方式。想了解 torch 載入後 AI 在 QGIS 中能做什麼,請從 QGIS AI 中心開始。


