ImportError: DLL load failed while importing _gdal in QGIS su Windows
ImportError: DLL load failed while importing _gdal in QGIS on Windows
Una seconda copia di GDAL si trova nel tuo PATH e Windows carica le sue DLL invece di quelle di QGIS. Individua le cartelle che contengono una gdal*.dll, rimuovi dal PATH quelle che non appartengono a QGIS, quindi disconnettiti da Windows e accedi nuovamente.
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().
Si applica a Windows, QGIS 3.16 e versioni successive, e a qualsiasi versione di Python 3.8 o successiva che importi from osgeo import gdal. Lo stesso errore appare anche come "Couldn't load plugin 'processing'" nel pannello QGIS Log Messages.
Perché succede
Le ultime tre righe sono un'indicazione che GDAL stampa quando l'importazione fallisce. Non sono la causa, ed è per questo che impostare la variabile spesso non cambia nulla.
Python 3.8 ha smesso di cercare le DLL di estensione nel PATH. osgeo/__init__.py di GDAL aggira il problema: percorre il PATH e, per ogni cartella che contiene una gdal*.dll o una libgdal*.dll, chiama os.add_dll_directory(). Microsoft non garantisce un ordine tra le cartelle aggiunte in questo modo, quindi quando sono presenti due copie può prevalere quella sbagliata, le cui DLL non corrispondono al modulo _gdal fornito da QGIS. Seconda causa, meno comune: un semplice python.exe o un'esecuzione da PyCharm al di fuori dell'ambiente QGIS, dove non è registrata alcuna cartella GDAL. Terza: un'installazione OSGeo4W aggiornata solo parzialmente, che contiene sia gdal sia gdal-dev.
Per distinguerle, esegui il controllo del passaggio 1. Due o più cartelle indicano la prima causa. Zero cartelle indica la seconda.
La soluzione
Elenca tutte le cartelle del PATH che contengono una DLL GDAL
Apri la OSGeo4W Shell dalla cartella di QGIS nel menu Start ed esegui questo comando, che ripete la logica usata da 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')))))"
Rimuovi le copie che non appartengono a QGIS
Anaconda, Miniconda, una seconda installazione di QGIS o OSGeo4W, oppure un altro pacchetto GIS che aggiunge il proprio GDAL al PATH. Apri Start, digita "variabili d'ambiente", apri Modifica le variabili d'ambiente di sistema, poi Variabili d'ambiente, quindi Path. Elimina queste voci. Disconnettiti da Windows e accedi nuovamente, così ogni processo acquisirà il nuovo PATH.
Avvia QGIS dal suo collegamento
Non da una shell in cui hai già eseguito lo script di attivazione di un altro ambiente e non da una seconda sessione della OSGeo4W Shell. Una shell che ha impostato un percorso gdal-dev lo passa a QGIS.
Per un interprete esterno, usa l'ambiente QGIS
Esegui lo script nella OSGeo4W Shell oppure tramite python-qgis.bat nella cartella bin di QGIS. In questo modo la cartella DLL corretta viene registrata prima dell'avvio di Python.
Se non ha funzionato
- Imposta la variabile, ma aspettati poco. In QGIS: Impostazioni, poi Opzioni, quindi Sistema, poi il gruppo Ambiente. Seleziona la casella delle variabili personalizzate, aggiungi
USE_PATH_FOR_GDAL_PYTHONcon il valoreYES, quindi riavvia QGIS. È utile quando la cartella corretta è nel PATH e non ci sono conflitti. Quando sono presenti due copie di GDAL, non risolve il problema. - In conda, installa
gdalsolo da conda-forge, in un ambiente nuovo, e non inserirvi mai una wheel GDAL di pip. - Ripara l'installazione: esegui nuovamente l'installer OSGeo4W e reinstalla i pacchetti
gdaleqgis, oppure reinstalla QGIS dall'installer autonomo. È il modo più rapido per uscire da un'installazione OSGeo4W aggiornata solo parzialmente.
Continua a leggereAI Segmentation per QGIS: la guida completa

