在64位Windows上安装SetupTools

133

我正在Windows 7 64位上运行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的任何安装程序。我是错过了什么,还是必须从源代码安装?


7
读者注意:向下滑动,接受的答案不是最好的答案。 - user334911
很遗憾,当我发布我的问题时,64位的SetupTools安装程序并不存在,所以我接受了这个解决方法,明知道它是一个hack。 - quanticle
2
@JohnRobertson 那么最好的答案是什么? - rrs
11个回答

142
问题:你拥有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自动处理,程序不会注意到)。这是预期行为,而不是错误。
通常情况下,你有以下选择:
  • “干净”的方法:如果必须使用32位模块或扩展,就使用32位Python。
  • 另一种“干净”的方法:只有在使用64位Python时才使用64位安装程序(见下文)。
  • 上面的答案建议的方法:将HKLM\SOFTWARE\Python复制到HKLM\SOFTWARE\wow6432node\Python,但这样做导致二进制分发出现问题,因为64位Python无法加载32位编译的模块(切勿这样做!)。
  • 使用setuptools而不是distutils安装纯Python模块(使用easy_install或pip)。

以setuptools本身为例,例如,您不能使用32位安装程序来安装64位Python,因为它包含了二进制文件。但是在http://www.lfd.uci.edu/~gohlke/pythonlibs/上有一个64位安装程序(还有许多其他模块的安装程序)。如今,PyPi上的许多软件包都有二进制分发版本,所以您可以通过pip进行安装。


7
非官方安装程序的好链接! - Andriy Drozdyuk
2
同样适用于另一种情况(2.7 32和setuptools 64)https://dev59.com/VnM_5IYBdhLWcg3wXx_Z#10966396 <--查找已安装的Python版本和32/64。 - Cu7l4ss
这并不完全是Python的错,我认为。 - leoluk
1
那个链接真是太棒了! - Paul Becotte
1
对于那些不知道如何安装whl文件的人,您可以使用pip进行安装,例如 pip install xyz.whl - arun
显示剩余4条评论

91

显然(在OS X上也遇到了相关的64位和32位问题),Windows安装程序中存在一个错误。我偶然发现了这种解决方法,它可能有所帮助 - 基本上,你需要创建自己的注册表值HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.6\InstallPath并从HKEY_LOCAL_MACHINE\SOFTWARE\Python\PythonCore\2.6\InstallPath复制InstallPath值。有关更多详细信息,请参阅下面的答案。

如果这样做,要注意setuptools可能只安装32位库

注意:下面的回复提供了更多详细信息,请务必阅读。


1
同时适用于安装PIL(PIL-1.1.7.win32-py2.7)。 - panny

69

我制作了一个注册表(.reg)文件,可以自动为您更改注册表。如果安装在"C:\Python27"中,则可正常工作:

下载32位版本 HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER\SOFTWARE\wow6432node\

下载64位版本 HKEY_LOCAL_MACHINE|HKEY_CURRENT_USER\SOFTWARE\


3
你的REG文件对我有用,但我的问题恰恰相反,所以我不得不从所有键名中删除“\Wow6432Node”。 - pwhe23
@BennyNeugebauer 没问题。 - Joe DF
三年后仍然具有重要意义。谢谢您。 - twig
所以,32位或64位是针对Python版本而不是操作系统位数,对吗? - wordsforthewise
系统架构,如果一个不行,就尝试另一个。 :) - Joe DF
显示剩余3条评论

28

没错,问题出在64位Python和32位setuptools安装程序之间的不兼容。

在Windows上获取64位setuptools的最佳方法是下载ez_setup.py到C:\Python27\Scripts并运行它。它将为您下载适当的64位.egg文件并为您安装。

来源:http://pypi.python.org/pypi/setuptools

附言:我建议不要使用第三方的64位.exe setuptools安装程序或操纵注册表。


2
简直不敢相信这个解决方案是多么快速易行。我之前在其他途径上卡了好几个小时。 - Brett
1
在我看来,最好且最安全的解决方案! - djfranzwa

9
创建一个名为python2.7.reg的文件(注册表文件),并将以下内容放入其中:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\Help]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\Help\MainPythonDocumentation]
@="C:\\Python27\\Doc\\python26.chm"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath]
@="C:\\Python27\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath\InstallGroup]
@="Python 2.7"

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\Modules]

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.7\PythonPath]
@="C:\\Python27\\Lib;C:\\Python27\\DLLs;C:\\Python27\\Lib\\lib-tk"

确保每个路径都是正确的!

然后运行(合并)它,就完成了:)


谢谢!我可以确认它适用于Python 2.76和h5py设置。也许只需要更新文档路径到python276.chm以保持良好的秩序 :) - mork

9

此处获取register.py文件。将其保存在C盘或D盘,并在CMD中使用以下命令运行:

'python register.py'

然后您就能安装它。

这是最简单的解决方案。谢谢!我在尝试安装wxPython2.8-win32-unicode-2.8.12.1-py27时遇到了这个问题,它总是抱怨python未注册。 - Robert1968

3

如果你在Windows上使用64位的Python,请下载ez_setup.py并运行它;它会为你下载适当的.egg文件并安装。

截至目前,.exe安装程序不支持Windows上的64位Python版本,因为存在distutils安装程序兼容性问题


这个对我来说确实有效!Joe DF的另一个脚本对我没用。 - wordsforthewise

1

我尝试了上述方法,并将注册表键添加到LOCALMACHINE中,但没有完成任务。所以如果你还卡住了,请尝试这个。

Windows注册表编辑器版本5.00 [HKEY_CURRENT_USER\SOFTWARE\Python] [HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore] [HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\2.7] [HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\2.7\Help] [HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\2.7\Help\Main Python Documentation] @="C:\Python27\Doc\python272.chm" [HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\2.7\InstallPath] @="C:\Python27\" [HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\2.7\InstallPath\InstallGroup] @="Python 2.7" [HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\2.7\Modules] [HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\2.7\PythonPath] @="C:\Python27\Lib;C:\Python27\DLLs;C:\Python27\Lib\lib-tk"

将上述内容复制粘贴到记事本中,并将其保存为Python27.reg。现在按照上面的答案运行/合并文件。(确保Python安装路径根据您的安装进行了更正。

它只是对当前用户执行与上述答案建议的本地机器相同的操作。


1
为了让Windows安装程序能够找到已安装的Python目录在Windows 7中,或者改变一个安装程序要安装的Python版本,需要将安装路径添加到InstallPath注册表键的(Default)值中:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Python\PythonCore\2.X\InstallPath

其中 "X" 代表 Python 版本(即 2.5、2.6 或 2.7)。


0
这是另一个帖子/线程的链接。我能运行这个脚本来自动注册Python 2.7。(确保从要注册的Python 2.x .exe 运行它!)
为了注册Python 3.x,我不得不修改print语法并导入winreg(而不是_winreg),然后运行Python 3 .exe

https://dev59.com/-GIk5IYBdhLWcg3wi-tM#29633714


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接