コンテンツへスキップ
ブログに戻る
QGIS
Troubleshooting

QGIS(Windows)で「ImportError: DLL load failed while importing _gdal」が出る原因と解決方法

ImportError: DLL load failed while importing _gdal in QGIS on Windows

PATH上にGDALのコピーがもう1つあると、WindowsはQGISのDLLではなく、そちらのDLLを読み込みます。gdal*.dllを含むフォルダーを見つけ、QGIS以外のものをPATHから外してから、サインアウトして再度サインインしてください。

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

On Windows, with Python >= 3.8, DLLs are no longer imported from the PATH.
If gdalXXX.dll is in the PATH, then set the USE_PATH_FOR_GDAL_PYTHON=YES environment variable
to feed the PATH into os.add_dll_directory().

対象はWindows、QGIS 3.16以降、およびfrom osgeo import gdalをimportするPython 3.8以降です。同じエラーは、QGISのログメッセージパネルで "Couldn't load plugin 'processing'" と表示されることもあります。

原因

最後の3行は、importに失敗したときにGDALが出力するヒントです。原因そのものではありません。そのため、変数を設定しても変化しないことが多くあります。

Python 3.8では、拡張DLLをPATHから検索しなくなりました。GDALのosgeo/__init__.pyはこの問題に対処するため、PATHを走査し、gdal*.dllまたはlibgdal*.dllを含むすべてのフォルダーに対してos.add_dll_directory()を呼び出します。Microsoftは、この方法で追加されたフォルダー間の順序を保証していません。そのため、2つのコピーが存在すると、誤った方が優先されることがあります。そのDLLは、QGISに同梱された_gdalモジュールと一致しません。あまり一般的ではない2つ目の原因は、QGIS環境の外で通常のpython.exeを実行したり、PyCharmから実行したりして、GDALフォルダーがまったく登録されていないことです。3つ目は、gdalgdal-devの両方を含む、途中までアップグレードされたOSGeo4Wのインストールです。

原因を区別するには、手順1のチェックを実行してください。フォルダーが2つ以上あれば1つ目の原因です。フォルダーが0個なら2つ目の原因です。

解決方法

PATH上でGDAL DLLを含むすべてのフォルダーを一覧表示する

スタートメニューのQGISフォルダーからOSGeo4W Shellを開き、GDAL自身の処理を再現する次のコマンドを実行します。

python -c "import os,glob;print('\n'.join(p for p in os.environ['PATH'].split(';') if p and (glob.glob(os.path.join(p,'gdal*.dll')) or glob.glob(os.path.join(p,'libgdal*.dll')))))"

QGIS以外のコピーを削除する

Anaconda、Miniconda、2つ目のQGISまたはOSGeo4Wのインストール、その他のGISバンドルが独自のGDALをPATHに追加している場合があります。スタートを開き、「environment variables」と入力し、「Edit the system environment variables」、「Environment Variables」、「Path」の順に開きます。該当するエントリを削除します。すべてのプロセスが新しいPATHを取得できるよう、Windowsからサインアウトして再度サインインしてください。

専用のショートカットからQGISを起動する

別の環境のactivateスクリプトをすでに実行したシェルから起動しないでください。また、2つ目のOSGeo4W Shellセッションからも起動しないでください。gdal-devのパスを設定したシェルは、そのパスをQGISに渡します。

外部のインタープリターではQGIS環境を利用する

OSGeo4W Shell内でスクリプトを実行するか、QGISのbinフォルダーにあるpython-qgis.batを通して実行します。これにより、Pythonの起動前に正しいDLLフォルダーが登録されます。

それでも解決しない場合

  • 変数を設定します。ただし、効果はあまり期待しないでください。QGISで「Settings」、「Options」、「System」、「Environment」グループの順に開きます。カスタム変数のチェックボックスをオンにし、USE_PATH_FOR_GDAL_PYTHONに値YESを追加して、QGISを再起動します。PATH上に正しいフォルダーがあり、競合するものがない場合には役立ちます。GDALのコピーが2つ存在する場合には役立ちません。
  • condaでは、新しい環境でgdalをconda-forgeからのみ取得し、pipのGDAL wheelを混在させないでください。
  • インストールを修復します。OSGeo4Wインストーラーを再実行してgdalqgisパッケージを再インストールするか、スタンドアロンインストーラーからQGISを再インストールしてください。途中までアップグレードされたOSGeo4Wから抜け出す最短の方法です。