Vai al contenuto
QGIS
Risoluzione dei problemi

QGIS: DLL load failed while importing _C, come risolvere

Pubblicato il Aggiornato il

ImportError: DLL load failed while importing _C significa che Windows ha trovato PyTorch, ma poi si è rifiutato di caricare una delle DLL compilate sottostanti. Il problema si presenta in QGIS dopo che un plugin installa torch nel Python di QGIS, incluso il nostro. Installa il Microsoft Visual C++ Redistributable (x64), poi riavvia Windows: nella maggior parte dei computer il problema si risolve.

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.

Lo stesso errore indica un file diverso su alcuni computer, ma le soluzioni sono le stesse:

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

Vale per Windows 10 e 11, QGIS 3.22 e versioni successive, e PyTorch dalla 2.4.0 alla 2.8.0, le versioni per Windows che includono fbgemm.dll. La versione 2.9.0 ha rimosso quel file.

Se l'errore indica [WinError 127] invece di 126, fermati qui. Significa che la DLL è stata caricata, ma manca un simbolo al suo interno. Si tratta di una mancata corrispondenza di versione tra pacchetti, non di questo problema.

La soluzione rapida

Installa il Visual C++ Redistributable (x64)

Avvia vc_redist.x64.exe da aka.ms/vc14/vc_redist.x64.exe. Scegli x64 anche se hai già x86. Sono pacchetti separati e torch ha bisogno di x64.

Restart Windows

Riavvia Windows, non QGIS. Il programma di installazione completa parte del lavoro durante il riavvio.

Cerca un secondo Python

In un Command Prompt, esegui where python. Più di un risultato significa che un Anaconda, Miniconda o Python autonomo sta entrando in conflitto con quello di QGIS.

Rimuovi quel Python dal PATH

Apri Start, cerca "variabili d'ambiente", seleziona Modifica le variabili d'ambiente di sistema, poi Variabili d'ambiente e Path. Elimina le voci relative al Python che non usi in QGIS, quindi disconnettiti da Windows e accedi di nuovo.

Se l'errore non cambia, passa alla Soluzione 2.

Verifica che funzioni

Apri OSGeo4W Shell dalla cartella QGIS nel menu Start ed esegui:

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

Un numero di versione su una riga isolata, senza traceback sopra, significa che le DLL vengono caricate. Ripeti ora il test nel punto che conta: in QGIS, Plugin, poi Console Python, quindi import torch. Un prompt senza messaggi è il risultato desiderato. Se uno dei due test riesce e l'altro fallisce, stanno usando Python diversi, quindi torna al passaggio 3.

Soluzione 2: manca una dipendenza di fbgemm.dll

Su alcuni computer il redistributable è presente, ma manca comunque libomp140.x86_64.dll. La soluzione duratura consiste nel passare a PyTorch 2.9.0 o versioni successive, che non includono proprio fbgemm.dll. Se devi restare su una versione precedente, gli utenti del tracker PyTorch riferiscono che copiare libomp140.x86_64.dll, incluso nella versione gratuita di Visual Studio Community, permette di avviare il programma. È una soluzione temporanea, non una correzione del team di manutenzione, e nessuna wheel PyTorch include il file. Non scaricare una DLL isolata da un sito di download.

Se l'errore non cambia, passa alla Soluzione 3.

Soluzione 3: la wheel non è compatibile con il computer

Una build CUDA su un computer privo del driver NVIDIA corrispondente fallisce sulla stessa riga. Se non hai una GPU NVIDIA, forza la build CPU:

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

Se hai una GPU, usa il comando indicato dalla pagina di installazione di PyTorch per la tua versione CUDA. In un ambiente conda, installa torch con conda invece di pip, così le librerie runtime provengono dallo stesso ambiente del pacchetto.

Se l'errore non cambia, passa alla Soluzione 4.

Soluzione 4: l'antivirus ha rimosso un file dopo l'installazione

Apri Sicurezza di Windows, poi Protezione da virus e minacce, quindi Cronologia della protezione. Ripristina tutto ciò che è stato rimosso dalla cartella site-packages, aggiungi la cartella alle esclusioni e reinstalla torch. L'installazione ha segnalato di essere riuscita e la cartella sembra ancora completa, quindi nulla sullo schermo indica questa causa.

Se l'errore non cambia, passa alla sezione Ancora non funziona? qui sotto.

Perché succede

PyTorch include DLL compilate invece di solo Python. fbgemm.dll e le DLL vicine in torch/lib si collegano al runtime C di Microsoft, e Windows rifiuta di caricare una DLL quando non riesce a trovare le dipendenze proprie di quella DLL. Segnala il problema all'inizio della catena, su _C, il modulo di estensione di torch che esegue l'importazione. Per questo il messaggio indica un file che si trova proprio lì sul disco.

La seconda causa è Python 3.8. Da quella versione, vengono cercati solo i percorsi di sistema, la cartella che contiene la DLL o il file PYD e le cartelle aggiunte con add_dll_directory(). PATH e la cartella di lavoro corrente non vengono più usati. Di conseguenza, un computer che contiene sia Anaconda sia QGIS può fornire al loader una torch/lib del Python sbagliato, senza che l'errore dica quale sia stata scelta. Avvia QGIS dal collegamento nel menu Start, mai da una shell in cui hai eseguito conda activate.

Ancora non funziona?

AI Segmentation è il nostro plugin che installa PyTorch nel Python di QGIS, quindi è quello che può mostrarti questo errore. Le sue modalità cloud eseguono i modelli sui nostri server e non richiedono torch in locale, ma questo non risolve torch per altri plugin che ne hanno bisogno. Invia la versione di QGIS, il traceback completo e la versione del plugin a stephane.barbot@terra-lab.ai. Ti diremo quale delle quattro soluzioni si applica.

Domande frequenti

Perché l'errore indica _C quando il file mancante è fbgemm.dll?

_C è il modulo di estensione di torch che esegue l'importazione, quindi si trova in cima alla catena e Windows segnala lì il problema. Il file indicato nella riga precedente, fbgemm.dll o shm.dll, normalmente è presente sul disco. Non lo è invece ciò da cui quel file dipende.

Quali versioni di PyTorch sono interessate?

Le wheel per Windows dalla 2.4.0 alla 2.8.0 includono fbgemm.dll. La versione 2.9.0 lo ha rimosso, quindi passare a una versione più recente elimina questo problema specifico. La dicitura _C può comunque comparire per un altro motivo, ad esempio una build CUDA su un computer privo del driver corrispondente.

Qual è la differenza tra WinError 126 e WinError 127?

126 significa che Windows non ha trovato il modulo o una delle sue dipendenze, ed è questo il problema. 127 significa che la DLL è stata caricata, ma manca un simbolo al suo interno. Si tratta di una mancata corrispondenza di versione tra due pacchetti. Nessuna delle soluzioni precedenti risolve un errore 127.

Posso scaricare libomp140.x86_64.dll da un sito di DLL?

No. Prendilo dall'installazione gratuita di Visual Studio Community, da cui lo ottengono gli utenti che riportano questa soluzione temporanea sul tracker PyTorch. Una copia proveniente da un sito di download non è lo stesso file e, in ogni caso, nessuna wheel PyTorch per Windows include questo file.

Se trovi la stessa dicitura con GDAL, la versione _gdal di questo errore ha soluzioni specifiche. Per capire cosa fa AI in QGIS una volta caricato torch, inizia dall'hub AI di QGIS.