【问题标题】:The ImportError when importing 64bit dlls within 32bit python interpreter在 32 位 python 解释器中导入 64 位 dll 时的 ImportError
【发布时间】:2019-02-19 11:46:44
【问题描述】:

在64位python解释器中导入32位代码的错误码是

ImportError: DLL load failed: %1 is not a valid Win32 application.

这与在 32 位 python 解释器中导入 64 位代码时引发的错误相同吗?

如果不是,那是什么错误?

【问题讨论】:

  • 澄清评论:我的特定机器是 Windows 64bit。如果机器能够同时运行32bit64bit python 解释器,则意味着它也必须是64bit 机器

标签: python 32bit-64bit


【解决方案1】:

更新:我误读了原始问题(基于它在表示“扩展模块”时使用了“应用程序”一词)。当您谈论将不兼容的扩展模块加载到 Python 中时,错误结果应该是相同的;出于相同的基本原因,32 位 DLL(扩展模块只是 Windows 上 DLL 的一个小特例)与 64 位 Python 可执行文件不兼容,并且 64 位 DLL 与 32 位 Python 可执行文件不兼容,并且错误消息(源自尝试动态加载位不兼容的 DLL 时返回的 Windows 错误代码)将是相同的。


关于为后代保留但与 OP 无关的应用程序与模块的原始答案:


这绝对不是同一个错误;启动 64 位程序根本不会导入模块,因此不会引发 ImportError

就此而言,只要操作系统是 64 位并支持混合运行 32 位和 64 位进程,32 位 Python 在启动 64 位程序时应该不会遇到问题;问题是在同一进程中混合和匹配 32 位和 64 位代码;两个不相关的进程可以具有操作系统/硬件支持的任何位。

【讨论】:

  • 我已经竭尽全力检查这一点 - 错误实际上是相同的。我想你可能误解了我所说的loading 的意思我在问题中将其更改为importing 以完全清楚我正在将64bit 代码导入32bit python
  • 见我上面的帖子 - 我不确定这是否与你的第一个断言相矛盾,“这绝对不是同一个错误”,或者更确切地说,补充你的警告,“问题是在同一个过程中混合和匹配 32 位和 64 位代码” - 请不要说我很欣赏您的回答,我的回答并不是要与您自己的回答相矛盾,而是我真的有兴趣正确理解这一点
  • @AlexanderMcFarlane:是的,我将您的问题误读为“将 64 位模块导入 32 位 Python 会出现此错误;从 32 位 Python 启动 64 位应用程序会出现相同的错误吗?”问题是你指的是“应用程序”,而你真正的意思是“扩展模块”(“应用程序”是指一些可以作为完全独立的进程启动的顶级可执行文件,例如 subprocess.run(["myapplication"]) 不是直接加载完全进入 Python)。
  • 别担心,星期五晚上不准确是我的错!
【解决方案2】:

问答风格...在 64 位 Windows 机器上

同时运行两个导入...

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyfftw32
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed: The specified module could not be found.
>>> import pyfftw64
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed: %1 is not a valid Win32 application.

因此在 a 中加载 64bit 应用程序也会得到相同的 ImportError

我还检查了其他 64 位 .pyd 二进制文件,它给出了类似的错误。

【讨论】:

  • 啊,我看错了你原来的问题。您根本不是在谈论“应用程序”,而是在谈论 modules(准确地说是扩展模块)。
猜你喜欢
  • 1970-01-01
  • 2011-03-03
  • 2012-05-22
  • 2011-05-12
  • 2013-04-08
  • 1970-01-01
  • 2011-08-08
  • 2011-04-09
  • 2022-01-20
相关资源
最近更新 更多