Lewati ke konten
QGIS
Pemecahan Masalah

[Terpecahkan] DLL load failed importing _gdal di QGIS

Diterbitkan Diperbarui

ImportError: DLL load failed while importing _gdal merusak Python apa pun yang menjalankan from osgeo import gdal di dalam QGIS pada Windows, termasuk Processing Toolbox. Salinan GDAL kedua berada lebih awal di PATH daripada milik QGIS, jadi keluarkan folder non-QGIS tersebut dari PATH, lalu keluar dari Windows dan masuk kembali. Pada sebagian besar komputer, itulah seluruh perbaikannya, dan empat perbaikan di bawah mencakup sisanya.

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

GDAL menghapus petunjuk tiga baris tersebut pada versi 3.7.0, jadi pada instalasi saat ini Anda hanya mendapatkan baris pertama. Pada sebagian komputer, satu kata berubah, dan penyebabnya tetap sama:

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

Sebagian besar orang tidak pernah membaca kedua rumusan tersebut. Mereka menemui masalah ini sebagai satu baris di panel QGIS Log Messages, serta menu Processing yang kosong:

Couldn't load plugin 'processing'

Berlaku untuk Windows, QGIS 3.16 dan yang lebih baru, serta Python 3.8 atau yang lebih baru yang menjalankan from osgeo import gdal.

Perbaikan cepat

Daftarkan setiap folder di PATH yang berisi DLL GDAL

Buka OSGeo4W Shell dari folder QGIS di menu Start dan jalankan ini. Perintah ini mengulangi logika GDAL sendiri:

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')))))"

Baca baris pertama. Itulah folder yang dipilih GDAL, dan folder tersebut seharusnya berada di dalam instalasi QGIS Anda. Simpan seluruh outputnya, karena setiap perbaikan di bawah mengambil informasi darinya.

Hapus entri yang bukan QGIS

Anaconda, Miniconda, QGIS kedua atau instalasi OSGeo4W lain, serta bundel GIS lain. Buka Start, ketik "environment variables", buka Edit the system environment variables, lalu Environment Variables, kemudian Path, dan hapus entri tersebut. Keluar dari Windows dan masuk kembali.

Mulai QGIS dari pintasannya sendiri

Jangan dari shell tempat Anda sudah menjalankan skrip activate milik environment lain. Shell yang menempatkan path gdal-dev di urutan pertama akan langsung menyerahkannya kepada QGIS.

Periksa apakah sudah berhasil

Di QGIS, buka Plugins, lalu Python Console, dan jalankan:

from osgeo import gdal
print(gdal.__version__)

Nomor versi tanpa traceback di atasnya berarti DLL yang benar telah dimuat. Buka menu Processing juga, karena Toolbox kembali begitu plugin processing dapat mengimpor GDAL. Menu Processing yang kosong berarti masalahnya belum selesai.

Perbaikan 2: jalankan skrip Anda di dalam environment QGIS

Langkah 1 tidak mencetak apa pun. Tidak ada folder di PATH Anda yang berisi DLL GDAL, sehingga tidak ada yang pernah didaftarkan. Hal ini terjadi ketika python.exe biasa atau konfigurasi run PyCharm dimulai di luar environment QGIS. Jalankan skrip di OSGeo4W Shell, atau melalui python-qgis.bat di folder bin QGIS. Pada instalasi long term release, nama file tersebut adalah python-qgis-ltr.bat. Keduanya mendaftarkan folder DLL yang benar sebelum Python dimulai.

Jika error tetap sama, lanjutkan ke Perbaikan 3.

Perbaikan 3: perbaiki instalasi OSGeo4W yang peningkatannya tidak selesai

Langkah 1 mencetak beberapa baris dan semuanya berada di dalam pohon OSGeo4W yang sama. Anda membawa gdal dan gdal-dev sekaligus dari peningkatan yang berhenti di tengah jalan. Jalankan kembali installer OSGeo4W dan pasang ulang paket gdal dan qgis, atau pasang ulang QGIS dari standalone installer. Itu adalah jalan tercepat untuk keluar dari masalah ini.

Jika error tetap sama, lanjutkan ke Perbaikan 4.

Perbaikan 4: setel USE_PATH_FOR_GDAL_PYTHON

Langkah 1 mencetak satu baris, yaitu milik QGIS, tetapi impor tetap gagal. Sekarang variabel tersebut layak dicoba, dan hanya sekarang. Di QGIS: Settings, then Options, then System, then the Environment group. Centang kotak custom variables, tambahkan nama dan nilai berikut, lalu mulai ulang QGIS:

USE_PATH_FOR_GDAL_PYTHON=YES

Ini membantu sebagian kecil pengguna, karena alasan yang dijelaskan di bagian "Mengapa ini terjadi".

Jika error tetap sama, lanjutkan ke Perbaikan 5.

Perbaikan 5: gunakan satu GDAL per environment conda

GDAL Anda berasal dari conda. Gunakan GDAL dari conda-forge saja, dalam environment baru, dan jangan pernah mencampurkan wheel GDAL dari pip ke tempat yang sama. Satu channel, satu salinan.

Jika error tetap sama, kirimkan tiga hal di bawah ini kepada saya.

Mengapa ini terjadi

Python 3.8 berhenti mencari DLL ekstensi di PATH. GDAL mengatasinya di osgeo/__init__.py. Saat USE_PATH_FOR_GDAL_PYTHON tidak disetel, GDAL membaca PATH secara berurutan, mendaftarkan folder pertama yang berisi gdal*.dll atau libgdal*.dll dengan os.add_dll_directory(), lalu berhenti mencari. Jadi GDAL yang paling awal di PATH Anda yang menang. Ketika salinan tersebut bukan milik QGIS, DLL-nya tidak cocok dengan modul _gdal yang menjadi dasar pembangunan QGIS.

Menyetel variabel tersebut justru memperluas pencarian, bukan mempersempitnya, karena GDAL kemudian mendaftarkan setiap folder di PATH dan sama sekali tidak melakukan glob. Karena itu, baris yang dulu dicetak oleh pesan error hampir tidak membantu siapa pun.

AI Segmentation plugin kami membaca raster melalui GDAL yang sudah disertakan QGIS dan tidak memasang salinannya sendiri, sehingga plugin tersebut bekerja begitu impor di atas berhasil. Semua yang kami bangun untuk QGIS lainnya berada di halaman QGIS AI.

Masih bermasalah?

Kirimkan tiga hal kepada saya: versi QGIS Anda, traceback lengkap, dan output pemeriksaan PATH dari langkah 1 pada perbaikan cepat. Alamat saya adalah stephane.barbot@terra-lab.ai. Baris pertama output tersebut biasanya sudah cukup untuk menentukan Anda berada dalam kasus mana dari lima kasus yang ada.

Pertanyaan yang sering diajukan

Mengapa error saya tidak menyebut USE_PATH_FOR_GDAL_PYTHON?

GDAL menghapus tiga baris petunjuk tersebut pada versi 3.7.0, jadi versi apa pun yang terbaru hanya mencetak baris pertama dan tidak ada yang lain. Penyebabnya tidak berubah. Perbaikannya sama dengan yang akan Anda terapkan pada 3.6.

Apakah menyetel USE_PATH_FOR_GDAL_PYTHON=YES akan memperbaikinya?

Jarang, dan variabel ini menjadi Perbaikan 4, bukan Perbaikan 1, karena suatu alasan. Variabel tersebut membuat GDAL mendaftarkan setiap folder di PATH, bukan folder pertama yang berisi DLL GDAL. Jadi variabel ini memperluas pencarian, bukan mengarahkannya ke QGIS. Cobalah setelah PATH Anda menunjukkan satu folder GDAL dan impor masih gagal.

Mengapa Processing Toolbox saya menghilang pada saat yang sama?

Plugin processing mengimpor GDAL, sehingga plugin tersebut tidak dapat dimuat, dan QGIS menulis "Couldn't load plugin 'processing'" ke panel Log Messages. Toolbox kembali dengan sendirinya setelah impor berhasil, sehingga ini adalah cara tercepat untuk melihat apakah perbaikan berhasil.

Bagaimana jika traceback menyebut _C, bukan _gdal?

Itu modul yang berbeda dan membutuhkan perbaikan yang berbeda. Modul tersebut memiliki tulisannya sendiri: DLL load failed while importing _C.