Windows版QGISのImportError: _Cのインポート中にDLLの読み込みに失敗する場合
ImportError: DLL load failed while importing _C in QGIS on Windows
Microsoft Visual C++ Redistributable (x64)をaka.ms/vs/17/release/vc_redist.x64.exeからインストールし、Windowsを再起動してください。PyTorchにはコンパイル済みのDLLが含まれており、Microsoft C runtimeがないか古い場合、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.
Windows 10および11、QGIS 3.22以降、QGIS Pythonまたはplugin環境にインストールした任意のPyTorch 2.xが対象です。
原因
4つの原因で同じ行が表示されます。実際に多い順に並べると、次のとおりです。
- Visual C++ Redistributable (x64)がないか、古い。
fbgemm.dllをはじめとするtorch DLLはこれにリンクしています。 - マシン上の別のPython(Anaconda、Miniconda、単体インストール)が独自のtorch DLLを配置し、Windowsが先にそれらを見つけている。Python 3.8以降、拡張DLLはPATHではなく
os.add_dll_directory()から読み込まれます。混在した構成では、誤ったフォルダーが登録されます。 - インストールしたwheelがマシンに合っていない。対応するNVIDIAドライバーがないコンピューターでCUDAビルドを使うと、同じエラーが発生します。
- インストール完了後に、ウイルス対策ソフトまたは企業のアプリケーション制御ポリシーが
.pydまたは.dllを隔離した。
原因を切り分けるには、コマンドプロンプトでwhere pythonを実行します。結果が複数ある場合は原因2を示します。結果が1つで、Redistributableのインストール後に再起動してもエラーが残る場合は、原因3または4の可能性があります。
修正方法
Install the Visual C++ Redistributable (x64)
Microsoftからvc_redist.x64.exeをダウンロードして実行します。x86版も入っているマシンでも、x64ビルドを選んでください。
Restart Windows
QGISの再起動だけではなく、Windowsを再起動します。DLLの検索リストはプロセスごとに一度だけ読み込まれ、インストーラーが再起動まで処理を残すこともよくあります。
Test the import on its own
StartメニューのQGISフォルダーからOSGeo4W Shellを開き、python -c "import torch"を実行します。プロンプトが正常に戻れば成功です。QGIS内では、Plugins、次にPython Consoleを開き、import torchを実行します。
Remove the second Python from PATH
where pythonが複数のパスを返した場合は、Startを開いて「environment variables」と入力し、Edit the system environment variables、次にEnvironment Variables、次にPathを開きます。QGISで使わないPythonに属する項目を削除します。サインアウトしてから、もう一度サインインします。
Reinstall the wheel that matches the machine
NVIDIA GPUがないコンピューターでは、CPUビルドを強制します。pip install --force-reinstall torch --index-url https://download.pytorch.org/whl/cpu。GPUがある場合は、CUDAバージョンに対応したコマンドをPyTorchのインストールページで確認してください。
解決しない場合
- Redistributableが入っていても、依存関係の1つである
libomp140.x86_64.dllが不足しているマシンがあります。これは無料でインストールできるVisual Studio Communityに含まれています。ダウンロードサイトから単体のDLLをダウンロードしないでください。 - Windows Security、次にVirus and threat protection、次にProtection historyを確認します。
site-packagesフォルダーから削除されたものを復元し、再インストールする前にそのフォルダーを除外対象へ追加します。 - conda環境ではpipではなくcondaでtorchをインストールし、パッケージと同じ場所からランタイムライブラリが読み込まれるようにします。

