ImportError:DLL 加载失败:%1 不是有效的 Win32 应用程序。但是DLL在那里
Posted
技术标签:
【中文标题】ImportError:DLL 加载失败:%1 不是有效的 Win32 应用程序。但是DLL在那里【英文标题】:ImportError: DLL load failed: %1 is not a valid Win32 application. But the DLL's are there 【发布时间】:2013-10-01 22:03:00 【问题描述】:我的情况与 Error "ImportError: DLL load failed: %1 is not a valid Win32 application" 的情况非常相似,但那里的答案对我不起作用。
我的 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;...
这个文件夹包含了opencv_core246d.dll
等39个DLL文件。
OPENCV_DIR 有这个值:OPENCV_DIR=C:\lib\opencv\build\x64\vc11
。
Error "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 安装没有任何 Release 文件夹(除了 build/java 下的一个空文件夹)。
怎么了?我可以告诉 Python 详细跟踪加载过程吗?它到底在寻找什么 DLL 文件?
我注意到,根据http://www.dependencywalker.com/,C:\lib\opencv\build\python\2.7
中的cv2.pyd
是 32 位的,而我正在运行的机器和 Python 是 64 位的。这可能是问题吗?如果是这样,我在哪里可以找到 cv2.pyd 的 64 位版本?
【问题讨论】:
点击here,找到64位opencv @KillConsole:谢谢,我会试试的。由于我下载的安装包同时包含 x86 和 x64 子文件夹,因此我认为它包含了 64 位所需的所有内容。显然不是。万岁,解决了!现在我们正在处理“ImportError: numpy.core.multiarray failed to import”,所以我将尝试使用 64 位 numpy 的同一站点。如果您将您的评论变成答案,我会投票并接受它。 您使用的是哪个 Python 版本? (不是处理器位版本) @Begueradj:2.7,如果这就是你要问的。 我遇到了同样的问题,以下解决方案都没有帮助我,所以原来我的PYTHONPATH
曾经包含安装 SimpleCV 库后留下的条目。尽管我已经卸载了 SimpleCV,但 PYTHONPATH
没有恢复,并且指向了一些目录,其中一些目录与 SimpleCV 安装留下的 OpenCV 版本冲突。解决方法:清除PYTHONPATH
。
【参考方案1】:
Unofficial Windows Binaries for Python Extension Packages
您可以从这里找到任何 Python 库。
【讨论】:
这真的很有帮助。我不确定出了什么问题。我有一个版本的 opencv、anaconda3、python3。从上面的软件包列表中安装了 opencv_python-3.3.0+contrib-cp35-cp35m-win_amd64 并且经过数小时的努力能够成功导入 cv2。非常感谢。【参考方案2】:请检查您使用的 Python 版本是否也是 64 位。如果不是,那么这可能是问题所在。您将使用 32 位 Python 版本并为 OpenCV 库安装 64 位二进制文件。
【讨论】:
如问题中所述,我使用的是 64 位 Python。【参考方案3】:哇,我发现了另一个解决这个问题的案例。以上都没有奏效。最终,我使用了 python 的能力来反省正在加载的内容。对于 Python 2.7,这意味着:
import imp
imp.find_module("cv2")
这在Anaconda DLL 目录中出现了一个完全意外的“cv2.pyd”文件,多次卸载/安装尝试都没有触及该文件。 Python 是先看那里,但没有找到我的好安装。我删除了那个 cv2.pyd 文件并再次尝试 imp.find_module("cv2") 并且 python 立即找到了正确的文件并且 cv2 开始工作。
因此,如果其他解决方案都不适合您,请确保您使用 Python 内省来查看 Python 尝试加载的文件。
【讨论】:
我遇到了一个问题,它试图完全在不同的文件夹中运行文件的一个版本。这个解决方案帮助我弄清楚到底发生了什么。谢谢! 这是一个很好的答案,谢谢!我遇到了 PyDev 的问题,它从不兼容的 python 安装中加载“ctypes”,我意识到我需要设置我的解释器以使用 WinPython,它修复了它。【参考方案4】:就我而言,我有 64 位 Python,而 lxml 是错误的版本——我也应该使用 x64 版本。我通过在此处下载 64 位版本的 lxml 解决了这个问题:
https://pypi.python.org/pypi/lxml/3.4.1
lxml-3.4.1.win-amd64-py2.7.exe
这是一个令人沮丧的问题的最简单的答案。
【讨论】:
【参考方案5】:我刚遇到这个问题。原来这只是因为我使用的是 64 位版本的 OpenCV 文件。我尝试了 x86,它工作正常。
【讨论】:
【参考方案6】:我遇到了同样的问题。这是我所做的:
我从here下载了pywin32的wheel文件,然后
我卸载了 pywin32 模块。要卸载,请在命令提示符下执行以下命令。
pip uninstall pywin32
然后,我重新安装了 pywin32。要安装它,请在 pywin32 wheel 文件所在的同一目录中打开命令提示符。然后执行以下命令。
pip install <Name of the wheel file with extension>
Wheel 文件会是这样的:piwin32-XXX-cpXX-none-win32.whl
它为我解决了问题。
【讨论】:
【参考方案7】:我将cv2.pyd
文件从/opencv/build/python/2.7/x86
文件夹而不是从/x64
文件夹复制到C:/Python27/Lib/site-packeges
。我按照here 提供的其余说明进行操作。
由其他人添加,未验证:我还将文件 cv2.pyd
复制到文件夹 C:/Python27/Lib/site-packages/cv2
。它有效。
【讨论】:
【参考方案8】:对我来说,问题是我在 same Eclipse 项目中使用了不同版本的 Python。我的设置与 Project Properties 和 Run Configuration Python 版本不一致。
在菜单 Project → Properties → PyDev 中,我将 Interpreter 设置为 Python 2.7.11。
在运行配置 → 解释器中,我使用的是默认解释器。将其更改为 Python 2.7.11 解决了该问题。
【讨论】:
【参考方案9】:如果您的构建系统(在我的情况下为CMake)将文件从<name>.dll
复制到<name>.pyd
,如果原始文件实际上不是DLL 文件,您将收到此错误。在我的例子中,构建共享库被关闭了,所以底层文件实际上是一个*.lib
。
我通过在Dependency Walker 中加载pyd
文件并发现它无效时发现了这个错误。
【讨论】:
【参考方案10】:更新 NumPy。
pip install numpy --upgrade
它对我有用!
【讨论】:
【参考方案11】:这个对我有用:
pip install -- pywin32==227
【讨论】:
欢迎来到 Stack Overflow。为什么它对你有用?请问,您能否在此答案中添加更多详细信息? 谢谢!这实际上对我有用。我发现我使用的是 pywin 228,降级到 227 后一切正常。显然,228 中肯定添加了一些破坏向后兼容性的东西,但我不知道是什么。【参考方案12】:当我使用 32 位 Windows 安装程序在我的系统上卸载并重新安装不同版本的 Python 2.7.x 时,我遇到了同样的问题。我的大部分导入语句都出现同样的错误。
我卸载了新安装的 Python,下载了 64 位 Windows 安装程序,再次重新安装了 Python,它运行正常。
【讨论】:
【参考方案13】:所以我在 Windows 下安装 vtk 时遇到了问题(因为我使用 Python 3.7,到目前为止还没有可用的二进制文件。仅适用于较旧的 Python 版本pip install vtk
不起作用)
我确实在我的 cmd 中编写了 Python:
Python 3.7.3 on win32
所以我现在知道我在 32 位上运行 Python 3.7.3。
然后我在VTK‑8.2.0‑cp37‑cp37m‑win32.whl下载了正确的***
接下来我安装了那个***:
pip install VTK-8.2.0-cp37-cp37m-win32.whl
然后我测试了它并且它工作了:
python
import vtk
【讨论】:
【参考方案14】:我在尝试编写有关语音到文本的代码时遇到了同样的问题。
解决方案非常简单。使用pip方法卸载之前的pywin32:
pip uninstall pywin32
以上内容将删除现有的,默认情况下适用于 32 位计算机。并使用
再次安装pip install pywin32
这将为您正在使用的 64 位计算机安装一个。
【讨论】:
【参考方案15】:我在尝试运行 uvicorn 时遇到了类似的问题, 创建一个新的虚拟环境并重新安装 python 包工作
【讨论】:
【参考方案16】:您可以从official 或unofficial 站点安装opencv
。
如果您使用的是Anaconda
,请参阅this 问题和this 问题。
【讨论】:
【参考方案17】:它有一个非常简单的解决方案。
安装后opencv
地点
cv2.pyd
从C:\opencv\build\python\2.7\ **x64**
到C:\Python27\Lib\site-packages
而不是将cv2.pyd
从C:\opencv\build\python\2.7\ **x86**
放置到C:\Python27\Lib\site-packages
【讨论】:
【参考方案18】:尝试导入 mysqldb 时出现此错误。
对我有用的是卸载 Python,然后重新安装它。
安装 npm (https://www.npmjs.com/get-npm) 后出现错误。它所做的一件事就是安装 Python,即使我已经有了它。
【讨论】:
【参考方案19】:首先我将cv2.pyd
从/opencv/build/python/2.7/x86
复制到C:/Python27/Lib/site-packeges
。错误是
“RuntimeError: 模块针对 API 版本 9 编译,但这个版本的 numpy 是 7”
然后我安装了numpy-1.8.0-win32-superpack-python2.7.exe
,OpenCV 工作正常。
>>> import cv2
>>> print cv2.__version__
2.4.13
【讨论】:
【参考方案20】:-
请确保您已安装 Python 2.7.12 或以下版本。否则你肯定会得到这个错误。
如果操作系统是 64 位,请确保安装了 64 位的 Oracle 客户端。
确保用于 Python 2.7 的 Microsoft Visual C++ 编译器对于 64 位操作系统是 64 位,对于 32 位操作系统是 32 位。
注意:如果您的操作系统是 64 位,请安装所有 64 位的软件包,或者如果操作系统是 32 位,请安装 32 位软件包。
【讨论】:
【参考方案21】:这对我有用。我尝试了不同的方法,但这是我最好的解决方案。
打开命令提示符并键入以下内容;
pip install opencv-python
(确保您的 Internet 连接已打开。)
之后,再次尝试导入。
【讨论】:
【参考方案22】:也可能是您的 Anaconda 版本是 32 位,而应该是 64 位。
【讨论】:
【参考方案23】:我找到了解决方案。也许您可以尝试使用 cmd 窗口而不是 Anaconda 提示窗口来开始您的第一个 Scrapy 测试。
【讨论】:
以上是关于ImportError:DLL 加载失败:%1 不是有效的 Win32 应用程序。但是DLL在那里的主要内容,如果未能解决你的问题,请参考以下文章
ImportError: DLL 加载失败: %1 不是有效的 Win32 应用程序
Windows上的Tensorflow - ImportError:DLL加载失败:找不到指定的模块
pyodbc - ImportError:DLL 加载失败:
ImportError:DLL 加载失败:找不到指定的过程。 (导入sklearn)