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

Posted

技术标签:

【中文标题】ImportError: DLL 加载失败: %1 不是有效的 Win32 应用程序【英文标题】:Error "ImportError: DLL load failed: %1 is not a valid Win32 application" 【发布时间】:2013-01-15 19:01:20 【问题描述】:

我遇到了这个问题,我尝试在 python 上导入 cv2 并收到以下错误消息。

>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: %1 is not a valid Win32 application.

我知道有很多关于这个的帖子都建议包的位数与python包不同。

但是,我运行的一切都是 64 位的。我在win7 64位,我有winpython 2.7.3.3,64位分发,我用here提供的指令编译了64位opencv并将cv2.pyd dll放在Lib/site-packages文件夹中蟒蛇。

不幸的是,使用 32 位版本的 python 的建议不再适用于我,因为我必须处理对于 32 位来说太大的 numpy 数组。

谢谢!!!

------更新

唯一缺少的是将新的 opencv 二进制文件路径(C:\opencv\build\bin\Release)添加到 Windows PATH 环境变量,重新启动 python。

现在似乎一切正常!

【问题讨论】:

【参考方案1】:

您可以尝试安装 32 位版本的 opencv

【讨论】:

请注意,此问题已解决,如问题的更新部分所述。 @Francis 找到解决方案后,请始终将其添加为答案,而不是将其添加到您的问题中。【参考方案2】:

由于对 Win32 的引用,ImportError 消息有点误导,而问题只是未找到 opencv DLL。

通过将 opencv 二进制文件的路径添加到 Windows PATH 环境变量中解决了这个问题(例如,在我的计算机上,此路径为:C:\opencv\build\bin\Release)。

【讨论】:

执行此操作的步骤是什么? 我不明白的是,为什么错误消息没有说明无法加载的 DLL? %1 似乎只是 DLL 名称的占位符。 嗯,好的。因此,如果您在 64 位计算机上修复该错误,则必须从 x64 文件夹中复制 cv2.pyd。 @antred 这是一个占位符。它通常会被 DLL 替换,但它不起作用,因为 32 位无法在 64 位机器上加载。 @Francis:先生,您应该获得奖牌!谢谢,真的。 @AlexW 你是说 cv2.pyd 应该被复制...但是在哪里复制呢?【参考方案3】:

或者你必须为win 64bit重建cv2模块。

【讨论】:

【参考方案4】:

当我遇到此错误时,我的计算机崩溃并重新启动后它就消失了。尝试关闭并重新打开您的 IDE,如果不起作用,请尝试重新启动计算机。当我收到此错误时,我刚刚安装了库而没有重新启动 pycharm。

永远不要先关闭 PyCharm 进行测试,因为我的电脑一直在随机崩溃……正在解决这个问题,但它至少解决了这个问题……小胜利……:)。

【讨论】:

【参考方案5】:

您只需将 cv2.pyd 文件从 x86 文件夹(例如 C:\opencv\build\python\2.7\x86\)复制到 C:\ Python27\Lib\site-packages\ ,而不是来自 x64 文件夹。

希望对你有所帮助。

【讨论】:

【参考方案6】:

我刚刚点击了这个,问题是该软件包曾一度安装在每个用户的软件包目录中。 (在 Windows 上。)又名 %AppData%\Python。因此 Python 首先查找那里,找到了 .pyd 文件的旧 32 位版本,但由于列出的错误而失败。不幸的是, pip uninstall 本身不足以清除它,此时 pip 10.0.1 似乎没有用于卸载的 --user 参数,仅用于安装。

tl;dr 从 %AppData%\python\python27\site-packages 中删除旧的 .pyd 为我解决了这个问题。

【讨论】:

这也是我的问题。有一个旧版本的 python 似乎没有被正确删除。必须运行系统文件检查器来清理它【参考方案7】:

python版本混用也会出现这个错误:

例如,如果要加载的任何 DLL 已使用 python 2.7.16 编译,并且您尝试使用 python 2.7.15 导入,则会引发此错误 ImportError: DLL load failed: %1 is not a valid Win32 application.

这至少是我发现的问题所在。

【讨论】:

【参考方案8】:

我发布这个答案,以防有人还在寻找

我遇到了与上述相同的错误,但仅在我使用 pyinstaller 时才会发生

我在诗歌中做了以下事情

poetry run python -m pip install pypiwin32

它对我有用。我正在使用

python                            3.8.10
pyinstaller                       4.7
# Those are the versions that worked for me
pypiwin32                         223
pywin32                           303
pywin32-ctypes                    0.2.0

【讨论】:

以上是关于ImportError: DLL 加载失败: %1 不是有效的 Win32 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Windows上的Tensorflow - ImportError:DLL加载失败:找不到指定的模块

pyodbc - ImportError:DLL 加载失败:

ImportError:DLL 加载失败:找不到指定的过程。 (导入sklearn)

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

ImportError:导入 _remap 时 DLL 加载失败

sklearn:ImportError:DLL加载失败:找不到指定的模块