ImportError: DLL load failed while importing _gdal in QGIS on Windows
ImportError: DLL load failed while importing _gdal in QGIS on Windows
Uma segunda cópia do GDAL está no seu PATH, e o Windows carrega as DLLs dela em vez das do QGIS. Encontre as pastas que contêm uma gdal*.dll, remova as que não pertencem ao QGIS do PATH, saia da sua sessão do Windows e entre novamente.
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().
Aplica-se ao Windows, ao QGIS 3.16 e posteriores, e a qualquer Python 3.8 ou mais recente que importe from osgeo import gdal. O mesmo erro também aparece como "Couldn't load plugin 'processing'" no painel de mensagens de log do QGIS.
Por que isso acontece
As três últimas linhas são uma dica que o GDAL imprime quando o import falha. Elas não são a causa, por isso definir a variável frequentemente não muda nada.
O Python 3.8 parou de procurar DLLs de extensão no PATH. O osgeo/__init__.py do GDAL contorna isso: ele percorre o PATH e, para cada pasta que contém uma gdal*.dll ou libgdal*.dll, chama os.add_dll_directory(). A Microsoft não promete uma ordem entre as pastas adicionadas dessa forma. Portanto, quando há duas cópias presentes, a errada pode vencer, e as DLLs dela não correspondem ao módulo _gdal distribuído pelo QGIS. Segunda causa, menos comum: um python.exe simples ou uma execução pelo PyCharm fora do ambiente do QGIS, onde nenhuma pasta do GDAL é registrada. Terceira: uma instalação do OSGeo4W atualizada pela metade, contendo gdal e gdal-dev.
Para diferenciá-las, execute a verificação da etapa 1. Duas ou mais pastas indicam a primeira causa. Nenhuma pasta indica a segunda.
A correção
List every folder on PATH that holds a GDAL DLL
Abra o OSGeo4W Shell na pasta do QGIS pelo menu Iniciar e execute isto, que repete a própria lógica do 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, uma segunda instalação do QGIS ou do OSGeo4W, ou outro pacote de GIS que coloque seu próprio GDAL no PATH. Abra o menu Iniciar, digite "environment variables", abra Edit the system environment variables, depois Environment Variables e então Path. Exclua essas entradas. Saia do Windows e entre novamente, para que todos os processos carreguem o novo PATH.
Start QGIS from its own shortcut
Não a partir de um shell em que você já executou o script activate de outro ambiente, nem de uma segunda sessão do OSGeo4W Shell. Um shell que definiu um caminho para gdal-dev o repassa ao QGIS.
For an outside interpreter, borrow the QGIS environment
Execute seu script dentro do OSGeo4W Shell ou por meio do python-qgis.bat na pasta bin do QGIS. Isso registra a pasta correta das DLLs antes de o Python iniciar.
Se isso não funcionou
- Defina a variável, mas espere pouco. No QGIS: Settings, depois Options, depois System e então o grupo Environment. Marque a caixa de variáveis personalizadas, adicione
USE_PATH_FOR_GDAL_PYTHONcom o valorYESe reinicie o QGIS. Isso ajuda quando a pasta correta está no PATH e nada compete com ela. Com duas cópias do GDAL presentes, não ajuda. - No conda, instale o
gdalapenas do conda-forge, em um ambiente novo, e nunca misture um wheel do GDAL instalado via pip nele. - Repare a instalação: execute novamente o instalador do OSGeo4W e reinstale os pacotes
gdaleqgis, ou reinstale o QGIS usando o instalador independente. Essa é a maneira mais rápida de sair de uma instalação do OSGeo4W atualizada pela metade.
Leia a seguirAI Segmentation para QGIS: o guia completo

