Saltar al contenido
Volver al blog
QGIS
Troubleshooting

Cómo solucionar ImportError: DLL load failed while importing _gdal en QGIS para Windows

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

Una segunda copia de GDAL se encuentra en tu PATH y Windows carga sus DLL en lugar de las de QGIS. Encuentra las carpetas que contienen una gdal*.dll, elimina las que no sean de QGIS del PATH y cierra sesión en Windows para volver a iniciarla.

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

Se aplica a Windows, QGIS 3.16 y posteriores, y a cualquier Python 3.8 o más reciente que importe from osgeo import gdal. El mismo error también aparece como "Couldn't load plugin 'processing'" en el panel QGIS Log Messages.

Por qué ocurre

Las tres últimas líneas son una indicación que GDAL muestra cuando falla la importación. No son la causa, por eso establecer la variable tan a menudo no cambia nada.

Python 3.8 dejó de buscar DLL de extensiones en PATH. osgeo/__init__.py de GDAL evita este problema: recorre PATH y, por cada carpeta que contiene una gdal*.dll o libgdal*.dll, llama a os.add_dll_directory(). Microsoft no garantiza un orden entre las carpetas añadidas de esa forma, así que cuando hay dos copias presentes puede ganar la incorrecta, y sus DLL no coinciden con el módulo _gdal incluido en QGIS. Segunda causa, menos común: un python.exe normal o una ejecución desde PyCharm fuera del entorno de QGIS, donde no se registra ninguna carpeta de GDAL. Tercera: una instalación de OSGeo4W actualizada a medias que contiene tanto gdal como gdal-dev.

Para distinguirlas, ejecuta la comprobación del paso 1. Dos o más carpetas indican la primera causa. Cero carpetas indican la segunda.

La solución

List every folder on PATH that holds a GDAL DLL

Abre OSGeo4W Shell desde la carpeta de QGIS en el menú Inicio y ejecuta esto, que repite la lógica del propio 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, otra instalación de QGIS u OSGeo4W, u otro paquete GIS que ponga su propio GDAL en PATH. Abre Inicio, escribe "environment variables", abre Edit the system environment variables, después Environment Variables y luego Path. Elimina esas entradas. Cierra sesión en Windows y vuelve a iniciarla para que todos los procesos recojan el nuevo PATH.

Start QGIS from its own shortcut

No desde un shell donde ya hayas ejecutado el script de activación de otro entorno, ni desde otra sesión de OSGeo4W Shell. Un shell que haya establecido una ruta gdal-dev se la entrega a QGIS.

For an outside interpreter, borrow the QGIS environment

Ejecuta tu script dentro de OSGeo4W Shell o mediante python-qgis.bat en la carpeta bin de QGIS. Esto registra la carpeta de DLL correcta antes de que se inicie Python.

Si no funciona

  • Establece la variable, pero espera pocos resultados. En QGIS: Settings, después Options, luego System y el grupo Environment. Activa la casilla de variables personalizadas, añade USE_PATH_FOR_GDAL_PYTHON con el valor YES y reinicia QGIS. Ayuda cuando la carpeta correcta está en PATH y nada compite con ella. Cuando hay dos copias de GDAL, no ayuda.
  • En conda, instala gdal únicamente desde conda-forge, en un entorno nuevo, y nunca mezcles una wheel de GDAL de pip.
  • Repara la instalación: vuelve a ejecutar el instalador de OSGeo4W y reinstala los paquetes gdal y qgis, o reinstala QGIS desde el instalador independiente. Es la forma más rápida de salir de una instalación de OSGeo4W actualizada a medias.