Lewati ke konten
QGIS
Pemecahan masalah

[Terpecahkan] DLL load failed importing _C di QGIS

Diterbitkan Diperbarui

ImportError: DLL load failed while importing _C berarti Windows menemukan PyTorch lalu menolak memuat salah satu DLL terkompilasi di bawahnya. Anda mengalaminya di QGIS setelah sebuah plugin memasang torch ke Python milik QGIS, termasuk plugin kami. Instal Microsoft Visual C++ Redistributable (x64), lalu mulai ulang Windows. Ini biasanya mengatasi masalah di sebagian besar mesin.

Traceback (most recent call last):
  File "C:\...\site-packages\torch\__init__.py", line 141, in <module>
    raise err
OSError: [WinError 126] The specified module could not be found.
Error loading "C:\...\site-packages\torch\lib\fbgemm.dll" or one of its dependencies.

ImportError: DLL load failed while importing _C: The specified module could not be found.

Error yang sama dapat menyebutkan file berbeda di beberapa mesin, dan perbaikannya tetap sama:

Error loading "C:\...\site-packages\torch\lib\shm.dll" or one of its dependencies.

Berlaku untuk Windows 10 dan 11, QGIS 3.22 dan yang lebih baru, serta PyTorch 2.4.0 hingga 2.8.0, yaitu Windows wheels yang menyertakan fbgemm.dll. Versi 2.9.0 sudah tidak menyertakan file tersebut.

Jika error Anda menyebut [WinError 127], bukan 126, berhenti di sini. Error itu berarti DLL berhasil dimuat, tetapi ada symbol di dalamnya yang hilang. Ini adalah ketidakcocokan versi antar-package, bukan bug ini.

Perbaikan cepat

Instal Visual C++ Redistributable (x64)

Jalankan vc_redist.x64.exe dari aka.ms/vc14/vc_redist.x64.exe. Gunakan x64 meskipun Anda sudah memiliki x86. Keduanya adalah package terpisah, dan torch membutuhkan x64.

Mulai ulang Windows

Mulai ulang komputer, bukan hanya QGIS. Installer menyelesaikan sebagian pekerjaannya setelah restart.

Cari Python kedua

Di Command Prompt, jalankan where python. Jika hasilnya lebih dari satu, berarti Anaconda, Miniconda, atau Python standalone sedang bersaing dengan Python milik QGIS.

Hapus Python itu dari PATH

Buka Start, cari "environment variables", pilih Edit the system environment variables, Environment Variables, Path. Hapus entri untuk Python yang tidak Anda gunakan di QGIS, lalu sign out dari Windows dan masuk kembali.

Jika error tetap sama, lanjut ke Perbaikan 2.

Periksa apakah berhasil

Buka OSGeo4W Shell dari folder QGIS di menu Start, lalu jalankan:

python -c "import torch; print(torch.__version__)"

Nomor versi pada barisnya sendiri, tanpa traceback di atasnya, berarti DLL berhasil dimuat. Sekarang ulangi pengujian di tempat yang penting: di QGIS, Plugins, lalu Python Console, kemudian import torch. Prompt yang tidak menampilkan apa pun adalah hasil yang Anda inginkan. Jika salah satu pengujian berhasil dan yang lainnya gagal, keduanya menjalankan Python yang berbeda, jadi kembali ke langkah 3.

Perbaikan 2: dependensi fbgemm.dll hilang

Beberapa mesin sudah memiliki redistributable, tetapi tetap tidak memiliki libomp140.x86_64.dll. Solusi jangka panjangnya adalah beralih ke PyTorch 2.9.0 atau yang lebih baru, yang sama sekali tidak menyertakan fbgemm.dll. Jika Anda harus menggunakan versi yang lebih lama, pengguna di issue tracker PyTorch melaporkan bahwa menyalin libomp140.x86_64.dll, yang tersedia bersama Visual Studio Community gratis, membuat torch dapat berjalan. Itu adalah solusi sementara, bukan perbaikan dari pengelola, dan tidak ada PyTorch wheel yang menyertakan file ini. Jangan mengambil DLL lepas dari situs unduhan.

Jika error tetap sama, lanjut ke Perbaikan 3.

Perbaikan 3: wheel tidak cocok dengan mesin

Build CUDA pada komputer tanpa NVIDIA driver yang sesuai gagal pada baris yang sama. Jika tidak memiliki NVIDIA GPU, paksa gunakan build CPU:

pip install --force-reinstall torch --index-url https://download.pytorch.org/whl/cpu

Jika memiliki GPU, gunakan perintah yang diberikan halaman instalasi PyTorch untuk versi CUDA Anda. Di dalam environment conda, instal torch dengan conda, bukan pip, agar library runtime berasal dari tempat yang sama dengan package.

Jika error tetap sama, lanjut ke Perbaikan 4.

Perbaikan 4: antivirus mengambil file setelah instalasi

Buka Windows Security, lalu Virus and threat protection, kemudian Protection history. Pulihkan apa pun yang dihapus dari folder site-packages Anda, tambahkan folder itu ke pengecualian, lalu instal ulang torch. Instalasi melaporkan berhasil dan folder tersebut masih terlihat penuh, jadi tidak ada petunjuk di layar yang mengarah ke sini.

Jika error tetap sama, lanjut ke bagian Masih bermasalah? di bawah.

Mengapa ini terjadi

PyTorch menyertakan DLL terkompilasi, bukan Python murni. fbgemm.dll dan file-file di sekitarnya dalam torch/lib terhubung ke Microsoft C runtime, dan Windows menolak memuat sebuah DLL ketika tidak dapat menemukan dependensinya sendiri. Windows melaporkan kegagalan di bagian atas rantai, pada _C, yaitu modul ekstensi torch yang menjalankan import. Itulah sebabnya pesan tersebut menyebut file yang sebenarnya ada di disk.

Penyebab kedua adalah Python 3.8. Sejak rilis itu, hanya system paths, direktori yang berisi file DLL atau PYD, serta direktori yang ditambahkan dengan add_dll_directory() yang dicari. PATH dan current working directory sama sekali tidak lagi digunakan. Jadi, mesin yang memiliki Anaconda dan QGIS dapat memberikan loader torch/lib dari Python yang salah, dan error tersebut tidak memberi tahu Python mana yang dipilih. Jalankan QGIS dari shortcut menu Start miliknya sendiri, bukan dari shell tempat Anda menjalankan conda activate.

Masih bermasalah?

AI Segmentation adalah plugin kami yang memasang PyTorch ke Python milik QGIS, jadi plugin inilah yang dapat menampilkan error tersebut kepada Anda. Mode cloud-nya menjalankan model di server kami dan tidak memerlukan torch lokal, tetapi itu tidak memperbaiki torch untuk plugin lain yang membutuhkannya. Kirim versi QGIS, traceback lengkap, dan versi plugin ke stephane.barbot@terra-lab.ai. Kami akan memberi tahu Anda mana dari empat perbaikan tersebut yang sesuai.

Pertanyaan yang sering diajukan

Mengapa error menyebut _C ketika file yang hilang adalah fbgemm.dll?

_C adalah modul ekstensi torch yang menjalankan import, sehingga berada di bagian atas rantai dan Windows melaporkan kegagalan di sana. File yang disebutkan pada baris di atasnya, fbgemm.dll atau shm.dll, biasanya memang ada di disk. Yang tidak ada adalah dependensi file tersebut.

Versi PyTorch mana yang terdampak?

Windows wheels dari 2.4.0 hingga 2.8.0 menyertakan fbgemm.dll. Versi 2.9.0 sudah tidak menyertakannya, jadi memperbarui versi akan menghapus kegagalan khusus ini. Pesan _C masih dapat muncul karena alasan lain, seperti build CUDA pada mesin tanpa driver yang sesuai.

Apa perbedaan antara WinError 126 dan WinError 127?

126 berarti Windows tidak dapat menemukan modul atau salah satu dependensinya, dan itulah bug ini. 127 berarti DLL berhasil dimuat, tetapi ada symbol di dalamnya yang hilang. Ini adalah ketidakcocokan versi antara dua package. Tidak satu pun perbaikan di atas membantu untuk 127.

Bisakah saya mengunduh libomp140.x86_64.dll dari situs DLL?

Tidak. Ambil dari instalasi gratis Visual Studio Community, karena itulah sumber file yang digunakan oleh orang-orang yang melaporkan solusi sementara tersebut di issue tracker PyTorch. Salinan dari situs unduhan bukan file yang sama, dan PyTorch Windows wheel juga tidak menyertakan file ini.

Jika Anda menemui pesan yang sama pada GDAL, versi _gdal dari error ini memiliki perbaikannya sendiri. Untuk mengetahui fungsi AI di QGIS setelah torch berhasil dimuat, mulai dari hub QGIS AI.