QGIS : DLL load failed while importing _C, correctif
Publié le Mis à jour le
ImportError: DLL load failed while importing _C signifie que Windows a trouvé PyTorch, puis a refusé de charger l'une des DLL compilées qui se trouvent en dessous. Vous rencontrez cette erreur dans QGIS après qu'un plugin a installé torch dans le Python de QGIS, y compris le nôtre. Installez le Microsoft Visual C++ Redistributable (x64), puis redémarrez Windows : cela résout le problème sur la plupart des machines.
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.
Sur certaines machines, le même problème mentionne un autre fichier, mais les correctifs restent les mêmes :
Error loading "C:\...\site-packages\torch\lib\shm.dll" or one of its dependencies.
Cela concerne Windows 10 et 11, QGIS 3.22 et les versions ultérieures, ainsi que PyTorch 2.4.0 à 2.8.0, les versions Windows qui incluent fbgemm.dll. La version 2.9.0 a supprimé ce fichier.
Si votre erreur indique [WinError 127] au lieu de 126, arrêtez-vous ici. Cela signifie que la DLL a été chargée, mais qu'un symbole à l'intérieur est manquant. Il s'agit d'une incompatibilité de version entre les packages, et non de ce problème.
Le correctif rapide
Installer le Visual C++ Redistributable (x64)
Exécutez vc_redist.x64.exe depuis aka.ms/vc14/vc_redist.x64.exe. Choisissez x64 même si x86 est déjà installé. Ce sont deux packages distincts, et torch a besoin de x64.
Redémarrer Windows
Redémarrez Windows, pas QGIS. L'installateur termine une partie de son travail lors du redémarrage.
Chercher un deuxième Python
Dans une invite de commandes, exécutez where python. Plusieurs résultats signifient qu'un Python Anaconda, Miniconda ou autonome entre en conflit avec celui de QGIS.
Retirer ce Python du PATH
Ouvrez Démarrer, recherchez « variables d'environnement », puis sélectionnez Modifier les variables d'environnement système, Variables d'environnement, Path. Supprimez les entrées correspondant au Python que vous n'utilisez pas dans QGIS, puis déconnectez-vous de Windows et reconnectez-vous.
Si l'erreur n'a pas changé, passez au correctif 2.
Vérifiez que le problème est résolu
Ouvrez OSGeo4W Shell depuis le dossier QGIS dans le menu Démarrer, puis exécutez :
python -c "import torch; print(torch.__version__)"
Un numéro de version sur sa propre ligne, sans traceback au-dessus, signifie que les DLL se chargent. Répétez maintenant le test là où cela compte : dans QGIS, ouvrez Extensions > Console Python et exécutez import torch. Une invite silencieuse indique le résultat attendu. Si l'un des deux tests réussit et l'autre échoue, ils utilisent des Pythons différents. Revenez donc à l'étape 3.
Correctif 2 : une dépendance de fbgemm.dll est manquante
Certaines machines disposent du redistributable, mais n'ont toujours pas libomp140.x86_64.dll. Le correctif durable consiste à passer à PyTorch 2.9.0 ou à une version ultérieure, qui n'inclut plus du tout fbgemm.dll. Si vous devez conserver une version plus ancienne, des utilisateurs du tracker PyTorch indiquent que la copie de libomp140.x86_64.dll, fournie avec Visual Studio Community gratuit, leur permet de démarrer. Il s'agit d'un contournement, jamais d'un correctif du mainteneur, et aucun wheel PyTorch ne contient ce fichier. Ne téléchargez pas une DLL isolée depuis un site de téléchargement.
Si l'erreur n'a pas changé, passez au correctif 3.
Correctif 3 : le wheel ne correspond pas à la machine
Une version CUDA sur un ordinateur qui ne possède pas le pilote NVIDIA correspondant échoue sur la même ligne. Sans GPU NVIDIA, forcez la version CPU :
pip install --force-reinstall torch --index-url https://download.pytorch.org/whl/cpu
Avec un GPU, utilisez la commande indiquée par la page d'installation de PyTorch pour votre version de CUDA. Dans un environnement conda, installez torch avec conda plutôt qu'avec pip, afin que les bibliothèques d'exécution proviennent du même endroit que le package.
Si l'erreur n'a pas changé, passez au correctif 4.
Correctif 4 : l'antivirus a supprimé un fichier après l'installation
Ouvrez Sécurité Windows, puis Protection contre les virus et menaces, puis Historique de protection. Restaurez tout fichier supprimé de votre dossier site-packages, ajoutez ce dossier aux exclusions, puis réinstallez torch. L'installation a signalé une réussite et le dossier semble toujours bien rempli, donc rien à l'écran ne vous oriente vers cette cause.
Si l'erreur n'a pas changé, passez à la section « Toujours bloqué ? » ci-dessous.
Pourquoi cela se produit
PyTorch fournit des DLL compilées, et non du Python pur. fbgemm.dll et les fichiers voisins dans torch/lib sont liés au runtime C de Microsoft, et Windows refuse de charger une DLL lorsqu'il ne trouve pas les propres dépendances de cette DLL. Il signale l'échec au sommet de la chaîne, sur _C, le module d'extension torch qui effectue l'importation. C'est pourquoi le message mentionne un fichier qui se trouve pourtant bien sur le disque.
La deuxième cause est Python 3.8. Depuis cette version, seuls les chemins système, le dossier contenant la DLL ou le fichier PYD, ainsi que les dossiers ajoutés avec add_dll_directory() sont recherchés. PATH et le répertoire de travail courant ne sont plus utilisés du tout. Ainsi, une machine qui contient à la fois Anaconda et QGIS peut fournir au chargeur un torch/lib provenant du mauvais Python, sans que l'erreur indique lequel a été choisi. Lancez QGIS depuis son propre raccourci du menu Démarrer, jamais depuis un shell dans lequel vous avez exécuté un conda activate.
Toujours bloqué ?
AI Segmentation est notre plugin qui installe PyTorch dans le Python de QGIS. C'est donc celui qui peut faire apparaître cette erreur. Ses modes cloud exécutent les modèles sur nos serveurs et n'ont pas besoin de torch en local, ce qui ne répare pas torch pour les autres plugins qui en ont besoin. Envoyez la version de QGIS, le traceback complet et la version du plugin à stephane.barbot@terra-lab.ai. Nous vous indiquerons lequel des quatre correctifs s'applique.
Questions fréquentes
Pourquoi l'erreur mentionne-t-elle _C alors que le fichier manquant est fbgemm.dll ?
_C est le module d'extension torch qui effectue l'importation. Il se trouve donc au sommet de la chaîne et Windows y signale l'échec. Le fichier mentionné à la ligne précédente, fbgemm.dll ou shm.dll, est normalement présent sur le disque. Ce qui lui sert de dépendance ne l'est pas.
Quelles versions de PyTorch sont concernées ?
Les wheels Windows de 2.4.0 à 2.8.0 incluent fbgemm.dll. La version 2.9.0 l'a supprimé, donc la mise à jour élimine cet échec particulier. Le message concernant _C peut toutefois apparaître pour une autre raison, par exemple une version CUDA sur une machine dépourvue du pilote correspondant.
Quelle est la différence entre WinError 126 et WinError 127 ?
126 signifie que Windows n'a pas pu trouver le module ou l'une de ses dépendances. C'est le problème décrit ici. 127 signifie que la DLL a été chargée, mais qu'un symbole à l'intérieur est manquant. Il s'agit d'une incompatibilité de version entre deux packages. Aucun des correctifs ci-dessus ne résout une erreur 127.
Puis-je télécharger libomp140.x86_64.dll depuis un site de DLL ?
Non. Procurez-vous ce fichier dans l'installation gratuite de Visual Studio Community, qui est la source utilisée par les personnes signalant ce contournement sur le tracker PyTorch. Une copie provenant d'un site de téléchargement n'est pas le même fichier, et aucun wheel PyTorch Windows ne contient ce fichier de toute façon.
Si vous rencontrez le même message avec GDAL, la version _gdal de cette erreur propose ses propres correctifs. Pour découvrir ce que l'IA dans QGIS permet de faire une fois torch chargé, commencez par le hub QGIS AI.


