【问题标题】:64-bit python 2.5/2.6+windows 7 "import socket" DLL load error64位python 2.5/2.6+windows 7“导入套接字”DLL加载错误
【发布时间】:2011-07-14 05:57:59
【问题描述】:

我安装了最新的 64 位 Python 2.5。我运行 shell,尝试import socket,得到:

>>> import socket
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python25\lib\socket.py", line 45, in <module>
    import _socket
ImportError: DLL load failed with error code 193

我在 64 位 Python 2.6.6 上尝试同样的方法,得到:

>>> import socket
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python26-64\lib\socket.py", line 46, in <module>
    import _socket
ImportError: DLL load failed: %1 is not a valid Win32 application.

有什么关系? (我仔细检查过,是的,操作系统是 64 位的)。

更新:我还在这台机器上安装了 32 位 python。如果这是一个冲突,我如何安装两个版本的 python 并让它们表现得很好?

【问题讨论】:

    标签: python windows windows-7 64-bit 32bit-64bit


    【解决方案1】:

    这两个错误是同一个错误,代码193,报两种不同的方式。这是因为您的 64 位 Python 正在尝试加载 32 位 DLL。

    很难说为什么会发生这种情况。也许您错误地安装了一些 32 位 Python 模块。可能路径有些混乱。

    但是,解决此类问题的最简单方法通常是切换到 32 位 Python,它可以在 64 位 Windows 上无可挑剔地运行。一个附带的好处是,您有时会想要使用仅以 32 位形式提供的模块 - 64 位模块支持仍然有点不完整。

    【讨论】:

    • 我确实安装了 32 位 python.. 问题是我使用的是使用 COM 的 virtualboxapi,它要求 python 具有与 virtualbox 相同的位数,即 64 位 =( . 否则我只支持 32 位。
    • 嗯。显然 _socket 的导入会导致尝试加载 32 位 DLL。如果错误消息告诉您哪个:%1 没有多大用处,那就太好了。如果我是你,我不会尝试将我的 PATH 环境变量剥离为准系统。可能是您的 PATH 上的某些东西导致了问题。在命令行执行此操作,然后启动 Python,以便将实验保持在该控制台窗口的本地!
    • 哦,问题是我迟钝了,即我运行脚本的目录有一个剩余的 py2exe 东西,我猜它里面有 32 位 dll。谢谢你的帮助!
    【解决方案2】:

    当我使用 py2exe 构建(32 位)二进制文件,然后在同一目录中运行 64 位解释器时,我遇到了这种情况。显然(并且合理地)它将选择套接字模块的本地实例(然后加载 32 位 dll)而不是解释器的套接字模块(正确加载 64 位 dll)。

    【讨论】: