コンテンツへスキップ
QGIS
トラブルシューティング

QGISで「DLL load failed while importing _C」を解決する方法

公開日 更新日

ImportError: DLL load failed while importing _C は、Windows が PyTorch を見つけたものの、その下にあるコンパイル済み DLL のいずれかの読み込みを拒否したことを意味します。プラグインがQGISのPythonにtorchをインストールした後に、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 wheel です。バージョン 2.9.0 ではこのファイルが削除されました。

エラーが 126 ではなく [WinError 127] と表示される場合は、ここで止めてください。127 は DLL 自体は読み込まれたものの、その内部のシンボルが見つからないことを意味します。これはこのバグではなく、パッケージ間のバージョン不一致です。

まず試す対処法

Visual C++ Redistributable(x64)をインストールする

aka.ms/vc14/vc_redist.x64.exe から vc_redist.x64.exe を実行します。すでに x86 をインストールしていても、x64 を選んでください。これらは別のパッケージであり、torch には x64 が必要です。

Windowsを再起動する

QGIS の再起動ではなく、Windows を再起動します。インストーラーの処理の一部は再起動時に完了します。

別のPythonがないか確認する

コマンドプロンプトで where python を実行します。結果が複数ある場合は、Anaconda、Miniconda、またはスタンドアロン版のPythonがQGISのPythonと競合しています。

そのPythonをPATHから外す

スタートメニューで「環境変数」と検索し、「システム環境変数の編集」、「環境変数」、「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 の依存ファイルが不足している

Visual C++ Redistributable がインストール済みでも、libomp140.x86_64.dll が不足している環境があります。根本的な対処は、fbgemm.dll 自体を含まない PyTorch 2.9.0 以降へ移行することです。古いバージョンを使い続ける必要がある場合、PyTorchのissueトラッカーでは、無償のVisual Studio Communityに含まれる libomp140.x86_64.dll を追加すると動作したという報告があります。これは回避策であり、開発元による修正ではありません。また、PyTorch wheel にこのファイルは含まれていません。ダウンロードサイトから単体の DLL を入手しないでください。

エラーが変わらない場合は、対処法 3 に進んでください。

対処法 3: wheel が環境に合っていない

対応するNVIDIAドライバがないコンピュータでCUDA版を使うと、同じ行で失敗します。NVIDIA GPUがない場合は、CPU版を強制します。

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

GPUがある場合は、CUDAのバージョンに合わせて PyTorchのインストールページ に表示されるコマンドを使います。conda環境内ではpipではなくcondaでtorchをインストールし、ランタイムライブラリの取得元をパッケージと同じ場所にそろえてください。

エラーが変わらない場合は、対処法 4 に進んでください。

対処法 4: インストール後にウイルス対策ソフトがファイルを削除した

Windowsセキュリティを開き、「ウイルスと脅威の防止」、「保護の履歴」の順に進みます。site-packages フォルダから削除されたものがあれば復元し、そのフォルダーを除外対象に追加してから torch を再インストールします。インストールは成功したと表示され、フォルダーにもファイルがそろっているように見えるため、画面上の情報だけではここが原因とは分かりません。

エラーが変わらない場合は、下の「まだ解決しない場合は?」に進んでください。

原因

PyTorchは純粋なPythonではなく、コンパイル済みのDLLを提供しています。torch/lib にある fbgemm.dll とその周辺のDLLはMicrosoft Cランタイムにリンクしています。Windowsは、あるDLL自身の依存ファイルを見つけられない場合、そのDLLの読み込みを拒否します。失敗は依存関係の連鎖の最上位にある _C、つまりimportを実行しているtorchの拡張モジュールで報告されます。そのため、エラーメッセージでは、実際にはディスク上に存在するファイルが原因のように表示されます。

2つ目の原因は Python 3.8 です。このバージョン以降、検索されるのはシステムパス、DLLまたはPYDファイルがあるディレクトリ、そして add_dll_directory() で追加されたディレクトリだけです。PATHとカレントディレクトリは一切使われなくなりました。そのため、AnacondaとQGISの両方が入った環境では、ローダーが間違ったPythonの torch/lib を渡されることがあり、エラーからはどちらが選ばれたのか分かりません。QGISは専用のスタートメニューのショートカットから起動し、condaの activate を実行したシェルからは起動しないでください。

まだ解決しない場合は?

AI Segmentation は、QGISのPythonにPyTorchをインストールする私たちのプラグインです。そのため、このエラーが表示される可能性があるのはこのプラグインです。クラウドモードではモデルを私たちのサーバー上で実行するため、ローカルのtorchは必要ありません。ただし、torchを必要とする別のプラグインの問題が修復されるわけではありません。QGISのバージョン、完全なトレースバック、プラグインのバージョンを stephane.barbot@terra-lab.ai に送ってください。4つの対処法のどれに該当するかお伝えします。

よくある質問

見つからないファイルが fbgemm.dll なのに、なぜエラーには _C と表示されるのですか?

_C はimportを実行しているtorchの拡張モジュールなので、依存関係の連鎖の最上位にあり、Windowsはそこでの失敗を報告します。その直前の行に表示される fbgemm.dll または shm.dll は、通常ディスク上に存在します。存在しないのは、そのファイルが依存しているものです。

影響を受ける PyTorch のバージョンはどれですか?

2.4.0 から 2.8.0 までの Windows wheel には fbgemm.dll が含まれています。バージョン 2.9.0 では削除されたため、アップグレードすれば今回の特定の失敗は解消されます。ただし、対応するドライバがない環境でCUDA版を使う場合など、別の理由でも _C という表示は出ることがあります。

WinError 126 と WinError 127 の違いは何ですか?

126は、Windowsがモジュールまたはその依存ファイルのいずれかを見つけられないことを意味し、今回のバグに該当します。127はDLLは読み込まれたものの、その内部のシンボルが見つからないことを意味し、2つのパッケージ間のバージョン不一致です。上記の対処法は 127 には効果がありません。

libomp140.x86_64.dll を DLL サイトからダウンロードしてもよいですか?

いいえ。無償のVisual Studio Communityのインストール先から入手してください。PyTorchのissueトラッカーで回避策を報告している人たちも、そこから取得しています。ダウンロードサイトのファイルは同じものとは限らず、そもそもPyTorchのWindows用wheelにこのファイルは含まれていません。

GDAL で同じエラーが表示された場合は、_gdal で発生する同じエラーには専用の対処法があります。torchが読み込めた後にQGISでAIができることは、QGIS AIから確認してください。