ImportError: Error al cargar la DLL:% 1 no es una aplicación Win32 válida. Pero las DLL están ahí

112

Tengo una situación muy parecida a la de ImportError: Error de carga de DLL:% 1 no es una aplicación Win32 válida , pero la respuesta no me funciona.

Mi código Python dice:

import cv2

Pero esa línea arroja el error que se muestra en el título de esta pregunta.

Tengo OpenCV instalado en C:\lib\opencvesta máquina de 64 bits. Estoy usando Python de 64 bits.

Mi PYTHONPATH variables: PYTHONPATH=C:\lib\opencv\build\python\2.7. Esta carpeta contiene cv2.pydy eso es todo.

Variable My PATH: Path=%OPENCV_DIR%\bin;...esta carpeta contiene 39 archivos DLL como opencv_core246d.dll.

OPENCV_DIR tiene este valor: OPENCV_DIR=C:\lib\opencv\build\x64\vc11.

La solución en ImportError: Error en la carga de DLL:% 1 no es una aplicación Win32 válida dice que agregue "la nueva ruta de binarios opencv ( C:\opencv\build\bin\Release) a la variable de entorno PATH de Windows". Pero como se muestra arriba, ya tengo la carpeta de binarios OpenCV ( C:\lib\opencv\build\x64\vc11\bin) en mi RUTA. Y mi instalación de OpenCV no tiene ninguna carpeta de lanzamiento (excepto una vacía en build / java).

¿Alguna idea de lo que va mal? ¿Puedo decirle a Python que rastree detalladamente el proceso de carga? ¿Exactamente qué DLL está buscando?

Gracias, lars

EDITAR:

Acabo de notar que, de acuerdo con http://www.dependencywalker.com/ , el cv2.pydde C:\lib\opencv\build\python\2.7es de 32 bits, mientras que la máquina y el pitón estoy corriendo son de 64 bits. ¿Podría ser el problema? Y si es así, ¿dónde puedo encontrar una versión de 64 bits de cv2.pyd?

LarsH
fuente
9
haga clic aquí y busque el opencv de 64 bits
Kill Console
1
@KillConsole: gracias, lo intentaré. Dado que el paquete de instalación que descargué tenía subcarpetas x86 y x64, asumí que incluía todo lo necesario para 64 bits. Aparentemente no. ¡Hurra, eso lo arregló! Ahora estamos en "ImportError: numpy.core.multiarray no pudo importar", así que intentaré el mismo sitio para numpy de 64 bits. Si convierte su comentario en una respuesta, votaré a favor y la aceptaré.
LarsH
¿Qué versión de Python usaste? (no en términos de versión de bits del procesador)
1
@Begueradj: 2.7, si eso es lo que estás preguntando.
LarsH
1
Tuve el mismo problema y ninguna de las siguientes soluciones me ayudó, por lo que resultó que PYTHONPATHsolía contener las entradas que la instalación de la biblioteca SimpleCV dejó allí. A pesar de que ya he desinstalado SimpleCV, PYTHONPATHno se restauró y apuntaba a algunos directorios con versiones conflictivas de OpenCV dejadas por la instalación de SimpleCV. Solución: borre el PYTHONPATH.
Anton Daneyko

Respuestas:

81

Binarios de Windows no oficiales para paquetes de extensión de Python

puedes encontrar cualquier libs de Python desde aquí

Matar consola
fuente
esto realmente ayudó. No estoy seguro de qué estaba mal. Tenía una versión de opencv, anaconda3, python3. Instalé opencv_python-3.3.0 + contrib-cp35-cp35m-win_amd64 de la lista de paquetes anterior y pude importar cv2 con éxito después de horas de lucha. Gracias una tonelada.
paloma esmeralda
41

Compruebe si la versión de Python que está utilizando también es de 64 bits. Si no, ese podría ser el problema. Estaría usando una versión de Python de 32 bits y habría instalado binarios de 64 bits para la biblioteca OPENCV.

Clive Verghese
fuente
Como se menciona en la pregunta, estaba usando Python de 64 bits.
LarsH
17

Vaya, encontré otro caso más para este problema. Ninguno de los anteriores funcionó. Finalmente usé la capacidad de Python para introspectar lo que se estaba cargando. Para python 2.7 esto significa:

import imp
imp.find_module("cv2")

Esto resultó en un archivo "cv2.pyd" completamente inesperado en un directorio DLL de Anaconda que no fue tocado por múltiples intentos de desinstalación / instalación. Python buscó allí primero y no encontró mi buena instalación. Eliminé ese archivo cv2.pyd y probé imp.find_module ("cv2") nuevamente y Python inmediatamente encontró el archivo correcto y cv2 comenzó a funcionar.

Entonces, si ninguna de las otras soluciones funciona para usted, asegúrese de usar la introspección de Python para ver qué archivo está tratando de cargar Python.

Ezekiel Kruglick
fuente
4
Tuve un problema al intentar ejecutar una versión del archivo en una carpeta diferente por completo. Esta solución aquí me ayudó a descubrir qué estaba pasando realmente. ¡Gracias!
Emad Y
3
Esta es una excelente respuesta, ¡gracias! Me encontré con un problema con PyDev donde estaba cargando "ctypes" desde una instalación incompatible de Python, y me di cuenta de que necesitaba configurar mi intérprete para usar WinPython, que lo solucionó.
eacousineau
7

En mi caso, tengo python de 64 bits, y lxml era la versión incorrecta; debería haber estado usando la versión x64 de eso también. Resolví esto descargando la versión de 64 bits de lxml aquí:

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

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

Esta fue la respuesta más simple a un problema frustrante.

Amalgovinus
fuente
6

Acabo de tener este problema, resulta que fue solo porque estaba usando la versión x64 del archivo opencv. Probé el x86 y funcionó.

olivo
fuente
2

Si su sistema de compilación (CMake en mi caso) copia el archivo de <name>.dlla <name>.pyd, obtendrá este error si el archivo original no era realmente un dll. En mi caso, la creación de bibliotecas compartidas se desactivó, por lo que el archivo subyacente era en realidad un*.lib .

Descubrí este error al cargar el pydarchivo en DependencyWalker y descubrí que no era válido.

MatrixManAtYrService
fuente
2

Yo tuve el mismo problema. Esto es lo que hice:

  1. Descargué el archivo de rueda pywin32 desde aquí , luego

  2. Desinstalé el módulo pywin32 . Para desinstalar, ejecute el siguiente comando en el símbolo del sistema.

    pip uninstall pywin32

  3. Luego, reinstalé pywin32 . Para instalarlo, abra el símbolo del sistema en el mismo directorio donde se encuentra el archivo de rueda pywin32. Luego ejecute el siguiente comando.

    pip install <Name of the wheel file with extension> El archivo de la rueda será como: piwin32-XXX-cpXX-none-win32.whl

Me resuelve el problema. Puede que también desee probarlo. Espero que funcione para ti también.

Abhishek Kashyap
fuente
2

Copié el cv2.pydarchivo de la /opencv/build/python/2.7/x86carpeta en lugar de desde la /x64carpeta a C:/Python27/Lib/site-packeges. Seguí el resto de las instrucciones proporcionadas aquí .

Agregado por otra persona, no verificado: también copio el archivo cv2.pyda la carpeta C:/Python27/Lib/site-packages/cv2. Funciona.

Autónomo
fuente
1

Para mí, el problema era que estaba usando diferentes versiones de Python en el mismo proyecto de Eclipse. Mi configuración no era consistente con las Propiedades del proyecto y las versiones Ejecutar configuración de Python.

En Proyecto> Propiedades> PyDev , tenía el intérprete configurado en Python2.7.11.

En Ejecutar configuraciones> Intérprete , estaba usando el intérprete predeterminado. Cambiarlo a Python 2.7.11 solucionó el problema.

Al Lelopath
fuente
1

Enfrenté el mismo problema cuando desinstalé y reinstalé una versión diferente de 2.7.x de Python en mi sistema usando un instalador de Windows de 32 bits. Recibí el mismo error en la mayoría de mis declaraciones de importación. Desinstalé Python recién instalado y descargué un instalador de Windows de 64 bits y reinstalé Python nuevamente y funcionó. Espero que esto te ayude.

user3233042
fuente
1

Así que tuve problemas para instalar vtk en Windows (como uso Python 3.7, hasta ahora no hay binarios disponibles solo para versiones anteriores de Python, pip install vtk no funciona)

Escribí python en mi cmd:

Python 3.7.3 on win32

Entonces ahora sé que tengo Python 3.7.3 ejecutándose en 32 bits.

Luego descargué la rueda correcta en VTK ‑ 8.2.0 ‑ cp37 ‑ cp37m ‑ win32.whl

A continuación, instalé esa rueda:

pip install VTK-8.2.0-cp37-cp37m-win32.whl

Luego lo probé y funcionó:

python
import vtk
sqp_125
fuente
1

Actualice numpy.

pip install numpy --upgrade

¡¡Trabaja para mi!!

Karthik Suresh
fuente
0

Primero copié cv2.pydde /opencv/build/python/2.7/x86a C:/Python27/Lib/site-packeges. El error fue

"RuntimeError: módulo compilado contra API versión 9 pero esta versión de numpy es 7"

Luego lo instalé numpy-1.8.0-win32-superpack-python2.7.exey opencv funciona bien.

>>> import cv2
>>> print cv2.__version__
2.4.13
alireza
fuente
0
  1. Asegúrese de haber instalado Python 2.7.12 o una versión anterior, de lo contrario obtendrá este error definitivamente.
  2. Asegúrese de que el cliente de Oracle esté instalado de 64 bits si el sistema operativo es de 64 bits.
  3. Asegúrese de que Microsoft Visual C ++ Compiler para Python 2.7 sea de 64 bits para sistemas operativos de 64 bits o de 32 bits para 32 bits. Nota: - SI su sistema operativo es de 64 bits, instale todos los paquetes de 64 bits o si el sistema operativo es de 32 bits, instale el paquete de 32 bits.
Ranjan
fuente
0

Tiene una solución muy sencilla. Después de instalaropencv lugar

cv2.pyd de C:\opencv\build\python\2.7\ **x64** aC:\Python27\Lib\site-packages

en lugar de, lugar cv2.pydde C:\opencv\build\python\2.7\ **x86**aC:\Python27\Lib\site-packages

sharat kanthi
fuente
0

Recibí este error al intentar importar MySQLdb.

Lo que funcionó para mí fue desinstalar Python y luego reinstalarlo.

Recibí el error después de instalar npm ( https://www.npmjs.com/get-npm ). Una cosa que hizo fue instalar Python aunque ya lo tenía.

usuario984003
fuente
0

Esto me ha funcionado. He probado diferentes métodos pero esta fue mi mejor solución.

Abra el símbolo del sistema y escriba lo siguiente; pip install opencv-python. (asegúrese de que su Internet esté encendido). después de eso, intente importarlo nuevamente.

usuario12907613
fuente
0

Este funcionó conmigo

pip install -- pywin32==227
Mohammed Said El-Sharkawy
fuente
1
Bienvenido a Stack Overflow. ¿Por qué funcionó para ti? Por favor, ¿podría agregar más detalles a esta respuesta?
Azametzin
-2

Encontré la solución, tal vez pueda intentar usar la ventana cmd en lugar de la ventana del indicador de anaconda para comenzar su primera prueba de scrapy.

Michael Ye
fuente