我在Sublime Text 3中安装了SublimeREPL,它工作得很好。但是,每当我尝试导入使用_socket
的模块(如urllib2和urllib)时,它都会给我一个ImportError。我运行os.path来验证路径是否正确。它也可以在python命令行中完美地运行,而不是在SublimeREPL中。
>>> import urllib2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "E:\Python27\lib\urllib2.py", line 94, in <module>
import httplib
File "E:\Python27\lib\httplib.py", line 71, in <module>
import socket
File "E:\Python27\lib\socket.py", line 47, in <module>
import _socket
ImportError: DLL load failed: %1 is not a valid Win32 application.
答案 0 :(得分:2)
您几乎肯定会混合Python安装。也就是说,您使用64位Python获得了SublimeREPL,但您在同一台机器上也获得了32位Python,并且您的PYTHONPATH
配置为指向32-比如Python而不是/自己的。
或者更糟糕的是,您将两个Pythons安装到同一目录中,并且您只有一个安装部分64位和部分32位。 (如果是这种情况,您将从命令行使用Python获得相同的错误。)
混合native和Cygwin Pythons,CPython和IronPython,或偶尔使用不同的标志或两个不同的XY版本编译的两个版本也可能导致这种情况,但32位和64位是最常见的原因。
urllib2
本身加载的原因是Python 2.7源代码是Python 2.7源代码;它来自哪个构造并不重要。但编译成DLL的C扩展是针对特定的Python解释器编译的,并且只能在该解释器上工作。如果Windows DLL加载器没有拒绝让Python继续下去,那么你以后会得到一个不同的错误。
虽然我们正在使用它,但Python在这个案例中改进了大约3.3的错误处理,使得它更容易分辨出发生了什么,但当然如果你坚持使用2.7,你就不会# 39;获得新功能。
从Python内部来看,判断你是否在32位或64位解释器中的最快方法是sys.getmaxsize
。如果它大概有2到40亿,你就是32位;如果它是9或18个太多位数到计数的数字,你就是64位。
要确定DLL是32位还是64位,在Windows上显然要比在宇宙中的任何其他平台上困难得多。有关详细信息,请参阅this question或this one。
答案 1 :(得分:0)
我遇到了同样的问题。我怀疑它与使用SublimeText 3 64bit和使用32位Python 3进行SublimeREPL有关。
我卸载了Python 3 32位,并安装了64位Python 3,但这提出了一个关于版本不匹配的新错误。我安装了Python 3.4,我当前版本的SublimeText捆绑了Python 3.3。
所以,我安装了Python 3.3 64bit来匹配SublimeText 3(Build 3083)的捆绑python,它终于奏效了。这是来自Sublime Text:
中的REPL选项卡Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:35:05) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib.request
>>>