2013-09-26 86 views
87

我有一个非常像ImportError: DLL load failed: %1 is not a valid Win32 application的情况,但答案没有为我工作。ImportError:DLL加载失败:%1不是有效的Win32应用程序。但DLL的有

我的Python代码说:

import cv2 

但该行抛出这个问题的标题所示的错误。

我在这台64位机器上安装了C:\lib\opencv的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 load failed: %1 is not a valid Win32 application表示将“新的opencv二进制文件路径(C:\opencv\build\bin\Release)添加到Windows PATH环境变量”。但是如上所示,我的PATH中已经有OpenCV二进制文件夹(C:\lib\opencv\build\x64\vc11\bin)。而我的OpenCV安装没有任何发布文件夹(build/java下的空白文件除外)。

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

谢谢, 拉斯

编辑:

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

+6

点击[浏览](HTTP:// WWW .lfd.uci.edu /〜gohlke/pythonlibs /#opencv)并找到64位opencv –

+1

@KillConsole:谢谢,我会试一试。由于我下载的安装包具有x86和x64子文件夹,因此我认为它包含了64位的所有内容。显然不是。万岁,修好了!现在我们正在处理“ImportError:numpy.core.multiarray无法导入”,所以我会尝试用于64位numpy的同一站点。如果你把你的评论写成答案,我会赞成并接受它。 – LarsH

+0

你使用了哪个Python版本? (而不是处理器位版本) – 2015-02-03 12:49:44

回答

73
+0

这确实有帮助。我不知道什么是错的。我有一个版本的opencv,anaconda3,python3。从上面的软件包列表中安装了opencv_python-3.3.0 + contrib-cp35-cp35m-win_amd64,经过数小时的努力后,能够成功导入cv2。万分感谢。 – emeralddove

27

找到任何的Python库请检查您是否正在使用Python版本也是64位。如果不是,那么这可能是问题。您将使用32位python版本,并将为OPENCV库安装一个64位二进制文​​件。

+0

正如问题中提到的,我使用的是64位Python。 – LarsH

6

在我的情况,我有64位的Python,它是lxml是错误的版本 - 我应该一直在使用它的x64版本。我解决了这个点击这里下载LXML的64位版本:

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

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

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

6

我刚刚遇到了这个问题,它只是因为我使用的是opencv文件的x64版本。试过了x86,它工作。

2

我将cv2.pyd文件从/opencv/build/python/2.7/x86文件夹复制而不是从/x64文件夹复制到C:/Python27/Lib/site-packeges。我遵循了其余的说明here提供的说明。

1

对我来说,问题是我在相同的 Eclipse项目中使用了不同版本的Python。我的设置与项目属性运行配置 Python版本不一致。

项目>属性> PyDev,我有解释器设置为Python2.7.11。

运行配置>解释器,我使用的是默认解释器。将其更改为Python 2.7.11可解决问题。

9

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

import imp 
imp.find_module("cv2") 

这不是由多个卸载感动的蟒蛇DLL目录打开了一个完全出乎意料“cv2.pyd”文件/安装的尝试。 Python首先在那里看,没有找到我的好安装。我删除了那个cv2.pyd文件并且再次尝试了imp.find_module(“cv2”),并且python立刻发现了正确的文件并且cv2开始工作。

因此,如果没有其他解决方案适用于您,请确保您使用python introspection来查看python试图加载的文件。

+1

我有一个问题,它试图完全在不同的文件夹中运行文件的一个版本。这里的解决方案帮助我弄清楚了究竟发生了什么。谢谢! –

+0

这是一个很好的答案,谢谢!我遇到了一个PyDev的问题,它从一个不兼容的Python安装中加载“ctypes”,我意识到我需要设置我的解释器来使用WinPython,它解决了这个问题。 – eacousineau

-2

我找到了解决方案,也许你可以尝试使用cmd窗口而不是anaconda提示窗口来启动你第一次scrapy测试。

0

首先我将cv2.pyd/opencv/build/python/2.7/x86复制到C:/Python27/Lib/site-packeges。错误是

"RuntimeError: module compiled against API version 9 but this version of numpy is 7"

然后我安装numpy-1.8.0-win32-superpack-python2.7.exe和opencv工作正常。

>>> import cv2 
>>> print cv2.__version__ 
2.4.13 
2

如果您的构建系统(CMake的在我的情况),将文件复制从<name>.dll<name>.pyd,你会如果原始文件本来就不是一个dll得到这个错误。在我的情况下,构建共享库已关闭,所以底层文件实际上是*.lib

我发现此错误是通过加载pyd文件在DependencyWalker并发现它无效。

1

我有同样的问题。下面是我所做的:

  1. 我从here下载pywin32轮的文件,然后

  2. 我卸载了pywin32模块。要卸载,请在命令提示符中执行以下命令。

    pip uninstall pywin32

  3. 于是,我重新安装pywin32。要安装它,请打开pywin32 wheel文件所在目录中的命令提示符。然后执行以下命令。

    pip install <Name of the wheel file with extension> 轮文件会像:piwin32-XXX-cpXX-NONE-win32.whl

它solvs这个问题对我来说。你也可以试试看。希望它也适合你。

1

当我在我的系统上使用32位Windows安装程序卸载并重新安装不同版本的2.7.x Python时,我遇到了同样的问题。我的大部分进口报表都有同样的错误。 我卸载了新安装的Python,并下载了一个64位Windows安装程序,并重新安装了Python,并且工作正常。 希望这可以帮助你。

0
  1. 请确定您已经安装了python 2.7.12或更低版本,否则您将会明确地得到这个错误。
  2. 如果OS是64位,请确保Oracle客户端已安装64位。
  3. 确保用于Python 2.7的Microsoft Visual C++编译器对于64位的Os是64位,对于32位是32位的。 注意: - 如果您的操作系统是64位安装所有包的64位或者如果Os是32位安装32位软件包。
0

它有一个非常简单的解决方案 安装的OpenCV ... 当您从C座cv2.pyd:\ OpenCV的\建设\ python的\ 2.7 \ 到C:\ Python27 \ LIB \定点包

相反,从C座cv2.pyd:\ OpenCV的\建设\ python的\ 2.7 \ 到C:\ Python27 \ LIB \站点包

相关问题