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 PropertiesRun Configuration Python 版本不一致。

在菜单 ProjectPropertiesPyDev 中,我将 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.pydC:\opencv\build\python\2.7\ **x64**C:\Python27\Lib\site-packages

而不是将cv2.pydC:\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)

ImportError:DLL 加载失败:%1 不是有效的 Win32 应用程序 - scikit-learn+

ImportError:导入 _remap 时 DLL 加载失败