Salut à tous
Je me heurte depuis quelques jours à un problème que je ne comprends pas. J'avais un code qui fonctionnait il y a 6 mois. Je n'y ai pas touché depuis et là il ne fonctionne plus. Il s'agit d'une erreur sur l'import d'une dll que mon code ne trouve plus. Sauf que la dll n'a pas bougé non plus ! ... Je regarde le sys.path, le dossier de la dll est bien dedans. Après, comme indiqué dans la doc de ctypes.cdll, ca peut être du à une autre dll, dont la dll surlaquelle je tire dépend. Ok, je recommences l'exercice avec une dll plus simple alors, sans dépendance. J'en ai trouvé une sur la toile :
smalldll.dll
(et en effet quand je la passe au dependency walker, il n'y a pas de dépendance). J'ouvre python directement dans mon shell pour ce nouveau test, comme ça en plus j'élimine les choses liées à l'IDE.
Je place 'smalldll.dll', directement à la racine de E:// dans cet exemple. Et je travaille dans un dossier temp que je créée en dessous.
Sur ce code la dll est trouvée. J'ai une
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 import os,sys from ctypes import cdll os.chdir('E:\\temp') print(sys.getcwd()) ## Ok, je suis bien dans E://temp cdll.LoadLibrary('E://smalldll.dll')
mais ok, la dll est trouvée donc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part OSError: [WinError 193] %1 nest pas une application Win32 valide
Si maintenant, je fais :
Là je retombe sur l'erreur de dll introuvable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if 'E://' not in sys.path : sys.path.append('E://') cdll.LoadLibrary('smalldll.dll')
Pourtant le répertoire dans lequel se trouve celle ci est bien dans mon python path ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part OSError: [WinError 126] Le module spécifié est introuvable
Dans le cas d'une dll qui tire sur autre dll, je n'ai pas la main pour pouvoir lui donner le chemin absolu. Je dois donc parvenir à faire fonctionner ce 2ième test.
L'un de vous a t il déjà rencontré un problème similaire ? Parvenez vous au même résultat que moi avec ce petit exemple de smalldll.dll ? Je suppute que ctypes.cdll a changé sa manière de faire, mais je ne trouve rien dans la doc concernant cela ...
J'ai essayé avec mon install de anaconda python 3.7, et aussi après avec un python 3.10.2 que je viens d'installer pour l'occasion. Que ce soit 3.7 ou 3.10.2, j'obtiens les mêmes résultats (c-à-d, la dll est trouvée si je donne le chemin absolu, mais ne l'est pas si je donne juste son nom et que le répertoire dans lequel elle se trouve est dans le sys.path)
Merci pour vos retours
Partager