Aller au contenu
Retour au blog
QGIS
Troubleshooting

ImportError: DLL load failed while importing _gdal dans QGIS sous Windows

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

Une deuxième copie de GDAL se trouve dans votre PATH, et Windows charge ses DLL à la place de celles de QGIS. Trouvez les dossiers qui contiennent une gdal*.dll, retirez ceux qui ne correspondent pas à QGIS du PATH, puis déconnectez-vous de Windows et reconnectez-vous.

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().

Concerne Windows, QGIS 3.16 et les versions ultérieures, ainsi que tout Python 3.8 ou plus récent qui importe from osgeo import gdal. La même erreur apparaît également sous la forme « Couldn't load plugin 'processing' » dans le panneau QGIS Log Messages.

Pourquoi cela se produit

Les trois dernières lignes sont un indice que GDAL affiche lorsque l’importation échoue. Elles n’en sont pas la cause, ce qui explique pourquoi la définition de la variable ne change si souvent rien.

Python 3.8 a cessé de rechercher les DLL d’extension dans le PATH. Le fichier osgeo/__init__.py de GDAL contourne ce problème : il parcourt le PATH et, pour chaque dossier contenant une gdal*.dll ou une libgdal*.dll, appelle os.add_dll_directory(). Microsoft ne garantit pas l’ordre entre les dossiers ajoutés de cette manière. Lorsque deux copies sont présentes, la mauvaise peut donc prendre le dessus, et ses DLL ne correspondent pas au module _gdal fourni avec QGIS. Deuxième cause, moins fréquente : un python.exe classique ou une exécution depuis PyCharm en dehors de l’environnement QGIS, où aucun dossier GDAL n’est enregistré. Troisième cause : une installation OSGeo4W partiellement mise à niveau qui contient à la fois gdal et gdal-dev.

Pour les différencier, exécutez la vérification de l’étape 1. Deux dossiers ou plus indiquent la première cause. Aucun dossier indique la deuxième.

La correction

List every folder on PATH that holds a GDAL DLL

Ouvrez OSGeo4W Shell depuis le dossier QGIS dans le menu Démarrer et exécutez ceci. La commande reprend la logique utilisée par 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')))))"

Remove the copies that are not QGIS

Anaconda, Miniconda, une deuxième installation de QGIS ou d’OSGeo4W, ou un autre bundle GIS qui place son propre GDAL dans le PATH. Ouvrez le menu Démarrer, saisissez « variables d’environnement », ouvrez Modifier les variables d’environnement système, puis Variables d’environnement, puis Path. Supprimez ces entrées. Déconnectez-vous de Windows et reconnectez-vous afin que chaque processus récupère le nouveau PATH.

Start QGIS from its own shortcut

Ne démarrez pas QGIS depuis un shell dans lequel vous avez déjà exécuté le script d’activation d’un autre environnement, ni depuis une deuxième session OSGeo4W Shell. Un shell qui a défini un chemin gdal-dev le transmet à QGIS.

For an outside interpreter, borrow the QGIS environment

Exécutez votre script dans OSGeo4W Shell ou via python-qgis.bat dans le dossier bin de QGIS. Cela enregistre le bon dossier de DLL avant le démarrage de Python.

Si cela ne fonctionne pas

  • Définissez la variable, mais n’en attendez pas beaucoup. Dans QGIS : Paramètres, puis Options, puis Système, puis le groupe Environnement. Cochez la case des variables personnalisées, ajoutez USE_PATH_FOR_GDAL_PYTHON avec la valeur YES, puis redémarrez QGIS. Cela aide lorsque le bon dossier se trouve dans le PATH et qu’aucune autre copie ne lui fait concurrence. Avec deux copies de GDAL présentes, cela ne suffit pas.
  • Dans conda, installez gdal uniquement depuis conda-forge, dans un nouvel environnement, et ne mélangez jamais une wheel GDAL de pip avec celui-ci.
  • Réparez l’installation : relancez l’installateur OSGeo4W et réinstallez les paquets gdal et qgis, ou réinstallez QGIS depuis l’installateur autonome. C’est le moyen le plus rapide de sortir d’une installation OSGeo4W partiellement mise à niveau.