web-dev-qa-db-fra.com

WindowsError: [Erreur 126] Le module spécifié est introuvable.

Je charge une dll en python en utilisant le code suivant:

if os.path.exists(dll_path):
     my_dll = ctypes.cdll.LoadLibrary(dll_path)

Mais j'obtiens continuellement l'erreur suivante

WindowsError: [Erreur 126] Le module spécifié est introuvable.

dll est présent sur le chemin spécifié, mais je n'ai pas compris pourquoi je reçois l'erreur.

22
MA1

Lorsque je vois des choses de ce genre, c'est généralement parce qu'il y a des barres obliques inverses dans le chemin qui sont converties.

Par exemple, les opérations suivantes vont échouer car\t dans la chaîne est converti en caractère de tabulation.

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:\tools\depends\depends.dll")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\tools\python271\lib\ctypes\__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "c:\tools\python271\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found

Il y a 3 solutions (si c'est le problème)

a) Utilisez des doubles barres obliques ...

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:\\tools\\depends\\depends.dll")

b) utiliser des barres obliques

>>> import ctypes
>>> ctypes.windll.LoadLibrary("c:/tools/depends/depends.dll")

c) utiliser des chaînes RAW (en précédant la chaîne avec r

>>> import ctypes
>>> ctypes.windll.LoadLibrary(r"c:\tools\depends\depends.dll")

Tandis que ce troisième fonctionne - j'ai eu l’impression de temps en temps que cela n’est pas considéré comme «correct» car les chaînes RAW étaient destinées aux expressions régulières. Je l'utilise depuis des années sans problèmes pour les chemins Windows sous Python :))

14
markm

Notez que même si la DLL est dans votre chemin. Si cette DLL s'appuie sur d'autres DLL qui ne sont pas dans votre chemin, vous pouvez obtenir la même erreur. Windows n'a pas pu trouver de dépendance dans ce cas. Windows n'est pas vraiment doué pour vous dire ce qu'il n'a pas pu trouver, mais seulement qu'il n'a pas trouvé quelque chose. C'est à vous de le comprendre. Le chemin de recherche de la DLL Windows peut être trouvé ici: http://msdn.Microsoft.com/en-us/library/7d83bc18.aspx

Dans mon cas, être sûr que toutes les dll nécessaires étaient dans le même répertoire et faire un os.chdir () vers ce répertoire a résolu le problème.

21
Doo Dah

J'ai rencontré le même problème dans Win10 32bit OS. J'ai résolu le problème en remplaçant la version DLL de Debug par version.

Je pense que c'est parce que la version de débogage DLL dépend d'autres DLL et la version finale ne le faisait pas.

1
haiwuxing

pour moi, installez la mise à jour 3 redistribuable Microsoft Visual C++ 2015 depuis https://www.Microsoft.com/en-us/download/details.aspx?id=53587 résolue.

0
junior_software

Sous Windows, c'est possible. Vous devrez installer: Visual C++ Redistributable pour Visual Studio 2015. J'ai eu le même problème et j'ai installé les deux versions (Windows x86 et Windows x64). Apparemment, les deux sont nécessaires pour que cela fonctionne.

0
André Silva

J'ai essayé de spécifier le chemin d'accès à la DLL de différentes manières (proposé par @markm), mais rien n'a fonctionné pour moi . J'ai résolu le problème en copiant la DLL dans le dossier du script. Ce n'est pas une bonne solution, mais d'accord pour mes besoins.

0
Elephant

En outre, il se peut que vous ayez oublié de définir votre répertoire de travail dans Eclipse sur le répertoire local approprié pour l’exécution de l’application.

0
ceorron