在64位Windows上安装SetupTools
我在64位的Windows 7上运行Python 2.7,当我运行setuptools的安装程序时,它告诉我Python 2.7没有安装。具体的错误信息是:
`Python Version 2.7 required which was not found in the registry`
我安装的Python版本是:
`Python 2.7 (r27:82525, Jul 4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win32`
我查看了setuptools的网站,发现上面没有提到64位Windows的安装程序。我是不是漏掉了什么,还是说我必须从源代码安装这个?
11 个回答
问题:你有64位的Python,但安装程序是32位的。这会导致扩展模块出现问题。
安装程序找不到Python的原因是Windows 7的透明32位仿真。64位和32位的程序会写入Windows注册表的不同部分。
64位的注册表路径是:HKLM|HKCU\SOFTWARE\
32位的注册表路径是:HKLM|HKCU\SOFTWARE\wow6432node\
。
这意味着64位的Python安装程序会写入HKLM\SOFTWARE\Python
,而32位的setuptools安装程序则会查看HKLM\SOFTWARE\wow6432node\Python
(这个过程是Windows自动处理的,程序不会察觉到)。这是一种正常的行为,不是bug。
通常,你有以下选择:
- 第一种“干净”的方法:如果你必须使用32位的模块或扩展,就使用32位的Python。
- 第二种“干净”的方法:在使用64位Python时,只使用64位的安装程序(见下文)。
- 上面提到的建议:将
HKLM\SOFTWARE\Python
复制到HKLM\SOFTWARE\wow6432node\Python
,但这会导致二进制分发的问题,因为64位的Python无法加载32位编译的模块(千万不要这样做!) - 使用setuptools安装纯Python模块,而不是distutils安装程序(easy_install或pip)。
以setuptools为例,你不能用32位的安装程序来安装64位的Python,因为它包含二进制文件。不过,你可以在http://www.lfd.uci.edu/~gohlke/pythonlibs/找到64位的安装程序(这里还有很多其他模块的安装程序)。现在,很多PyPi上的包都有二进制分发,所以你可以通过pip来安装它们。
看起来在OS X上遇到过相关的64位和32位问题后,发现Windows安装程序有一个bug。我偶然发现了这个解决办法,可能会对你有帮助。简单来说,就是你需要自己创建一个注册表值 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.6\InstallPath
,然后把 HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.6\InstallPath
里的InstallPath值复制过去。想了解更多细节,可以看看下面的回答。
如果你这样做,要注意setuptools可能只会安装32位的库。
注意:下面的回复提供了更多细节,建议你也去看看。