131 votes

ImportError: Le chargement de la DLL a échoué : %1 n'est pas une application Win32 valide. Mais les DLL sont là

J'ai une situation très similaire à celle du Error "ImportError: DLL load failed: %1 is not a valid Win32 application", mais la réponse là-bas ne fonctionne pas pour moi.

Mon code Python indique :

import cv2

Mais cette ligne provoque l'erreur affichée dans le titre de cette question.

J'ai installé OpenCV dans C:\lib\opencv sur cette machine 64 bits. J'utilise Python 64 bits.

Ma variable PYTHONPATH : PYTHONPATH=C:\lib\opencv\build\python\2.7. Ce dossier contient cv2.pyd et c'est tout.

Ma variable PATH : Path=%OPENCV_DIR%\bin;... Ce dossier contient 39 fichiers DLL tels que opencv_core246d.dll.

OPENCV_DIR a cette valeur : OPENCV_DIR=C:\lib\opencv\build\x64\vc11.

La solution sur Error "ImportError: DLL load failed: %1 is not a valid Win32 application" dit d'ajouter "le nouveau chemin des binaires opencv (C:\opencv\build\bin\Release) à la variable d'environnement PATH de Windows". Mais comme indiqué ci-dessus, j'ai déjà le dossier des binaires OpenCV (C:\lib\opencv\build\x64\vc11\bin) dans mon PATH. Et mon installation OpenCV n'a pas de dossiers Release (sauf un vide sous build/java).

Qu'est-ce qui ne va pas ? Puis-je dire à Python de tracer de manière verbose le processus de chargement ? Quels fichiers DLL exactement recherche-t-il ?

J'ai remarqué que, selon http://www.dependencywalker.com/, le cv2.pyd dans C:\lib\opencv\build\python\2.7 est en 32 bits, alors que la machine et le Python que j'utilise sont en 64 bits. Est-ce que ça pourrait être le problème ? Et si oui, où puis-je trouver une version 64 bits de cv2.pyd ?

88voto

Kill Console Points 566

Binaires non officiels pour Windows des paquets d'extension Python

Vous pouvez trouver toutes les bibliothèques Python à partir d'ici.

45voto

Clive Verghese Points 41

Veuillez vérifier si la version de Python que vous utilisez est également en 64 bits. Sinon, cela pourrait être le problème. Vous pourriez utiliser une version de Python 32 bits et avoir installé des binaires en 64 bits pour la bibliothèque OpenCV.

20voto

Ezekiel Kruglick Points 398

Wow, j'ai trouvé encore un autre cas pour ce problème. Aucun des cas ci-dessus n'a fonctionné. Finalement, j'ai utilisé la capacité de Python à inspecter ce qui était chargé. Pour Python 2.7, cela signifie :

import imp
imp.find_module("cv2")

Cela a révélé un fichier "cv2.pyd" complètement inattendu dans un répertoire DLL Anaconda qui n'a pas été touché par plusieurs tentatives de désinstallation/réinstallation. Python regardait d'abord là-bas et ne trouvait pas mon bon installation. J'ai supprimé ce fichier cv2.pyd et j'ai essayé de nouveau imp.find_module("cv2") et Python a immédiatement trouvé le bon fichier et cv2 a commencé à fonctionner.

Donc, si aucune des autres solutions ne fonctionne pour vous, assurez-vous d'utiliser l'introspection de Python pour voir quel fichier Python essaie de charger.

7voto

Amalgovinus Points 889

Dans mon cas, j'ai Python 64 bits, et c'était lxml qui était la mauvaise version - j'aurais dû utiliser la version x64 de celle-ci également. J'ai résolu cela en téléchargeant la version 64 bits de lxml ici :

https://pypi.python.org/pypi/lxml/3.4.1

lxml-3.4.1.win-amd64-py2.7.exe

C'était la réponse la plus simple à un problème frustrant.

6voto

olive_tree Points 941

Je viens juste d'avoir ce problème. Il s'avère que c'était juste parce que j'utilisais une version 64 bits du fichier OpenCV. J'ai essayé la version x86 et ça a fonctionné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X