ImportError:DLL加载失败:%1不是有效的Win32应用程序.但DLL就在那里

Lar*_*rsH 101 python dll opencv path

我有一个非常像ImportError的情况:DLL加载失败:%1不是一个有效的Win32应用程序,但答案不适合我.

我的Python代码说:

import cv2
Run Code Online (Sandbox Code Playgroud)

但该行抛出了此问题标题中显示的错误.

C:\lib\opencv在这台64位机器上安装了OpenCV .我正在使用64位Python.

我的PYTHONPATH变量:PYTHONPATH=C:\lib\opencv\build\python\2.7.这个文件夹包含cv2.pyd,就是全部.

我的PATH变量:Path=%OPENCV_DIR%\bin;...此文件夹包含39个DLL文件,例如opencv_core246d.dll.

OPENCV_DIR具有此值:OPENCV_DIR=C:\lib\opencv\build\x64\vc11.

ImportError的解决方案:DLL加载失败:%1不是有效的Win32应用程序,说"将新的opencv二进制文件路径(C:\opencv\build\bin\Release)添加到Windows PATH环境变量".但是如上所示,C:\lib\opencv\build\x64\vc11\bin我的PATH中已经有OpenCV二进制文件夹().我的OpenCV安装没有任何Release文件夹(build/java下的空文件夹除外).

关于出了什么问题的任何想法?我可以告诉Python详细跟踪加载过程吗?究竟是什么DLL正在寻找?

谢谢,拉尔斯

编辑:

我只注意到,根据http://www.dependencywalker.com/中,cv2.pydC:\lib\opencv\build\python\2.7为32位,而机器和我跑了Python是64位.这可能是问题吗?如果是这样,我在哪里可以找到64位版本的cv2.pyd?

Kil*_*ole 78

Python扩展包的非官方Windows二进制文件

你可以从这里找到任何python库


小智 37

请检查您使用的python版本是否也是64位.如果没有,则可能是问题.你将使用32位python版本,并为OPENCV库安装了64位二进制文​​件.


Eze*_*ick 14

哇,我发现了另一个这个问题的案例.以上都没有奏效.最终我使用python的能力来反省被加载的内容.对于python 2.7,这意味着:

import imp
imp.find_module("cv2")
Run Code Online (Sandbox Code Playgroud)

这在Anaconda DLL目录中发现了一个完全出乎意料的"cv2.pyd"文件,该文件未被多次卸载/安装尝试触及.Python首先在那里看,没有找到我的好装置.我删除了那个cv2.pyd文件并再次尝试了imp.find_module("cv2"),python立即找到了正确的文件并且cv2开始工作.

因此,如果其他解决方案都不适合您,请确保使用python内省来查看python尝试加载的文件.

  • 我有一个问题是它试图在不同的文件夹中完全运行该文件的版本.这个解决方案帮助我弄清楚究竟发生了什么.谢谢! (3认同)
  • 这是一个很好的答案,谢谢!我遇到了PyDev的一个问题,它从一个不兼容的python安装加载"ctypes",我意识到我需要设置我的解释器来使用WinPython来修复它. (2认同)

Ama*_*nus 6

在我的情况下,我有64位python,而lxml是错误的版本 - 我本来应该使用它的x64版本.我在这里通过下载64位版本的lxml来解决这个问题:

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

lxml-3.4.1.win-amd64-py2.7.exe
Run Code Online (Sandbox Code Playgroud)

这是令人沮丧的问题的最简单答案.


oli*_*ree 6

我只是遇到了这个问题,它只是因为我使用的是x64版本的opencv文件.尝试了x86,它运作良好.