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 ?

3voto

Abhishek Kashyap Points 865

J'ai eu le même problème. Voici ce que j'ai fait :

  1. J'ai téléchargé le fichier wheel pywin32 à partir de ici, ensuite

  2. J'ai désinstallé le module pywin32. Pour désinstaller, exécutez la commande suivante dans une fenêtre d'invite de commandes.

    pip uninstall pywin32

  3. Ensuite, j'ai réinstallé pywin32. Pour l'installer, ouvrez l'invite de commandes dans le même répertoire où se trouve le fichier wheel pywin32. Ensuite, exécutez la commande suivante.

    pip install Le fichier wheel ressemblera à : piwin32-XXX-cpXX-none-win32.whl

Cela a résolu le problème pour moi.

2voto

J'ai copié le fichier cv2.pyd du dossier /opencv/build/python/2.7/x86 au lieu du dossier /x64 vers C:/Python27/Lib/site-packeges. J'ai suivi le reste des instructions fournies ici.

Ajouté par quelqu'un d'autre, non vérifié : J'ai aussi copié le fichier cv2.pyd dans le dossier C:/Python27/Lib/site-packages/cv2. Ça marche.

2voto

mickey Points 442

Pour moi, le problème était que j'utilisais des versions différentes de Python dans le même projet Eclipse. Ma configuration n'était pas cohérente avec les Propriétés du Projet et les versions Python des Configurations d'Exécution.

Dans le menu ProjetPropriétésPyDev, j'avais l'Interprète configuré sur Python 2.7.11.

Dans les Configurations d'ExécutionInterprète, j'utilisais l'Interprète par Défaut. En le changeant pour Python 2.7.11, le problème a été résolu.

2voto

Si votre système de construction (CMake dans mon cas) copie le fichier de .dll à .pyd, vous obtiendrez cette erreur si le fichier d'origine n'était pas en réalité un fichier DLL. Dans mon cas, la construction de bibliothèques partagées a été désactivée, donc le fichier sous-jacent était en réalité un *.lib.

J'ai découvert cette erreur en chargeant le fichier pyd dans Dependency Walker et en trouvant qu'il n'était pas valide.

2voto

Karthik Suresh Points 21

Mettre à jour NumPy.

pip install numpy --upgrade

Cela fonctionne pour moi !

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