我可以将Python的Windows包安装到虚拟环境中吗?
原因:在Windows上安装Python的包时,可能会遇到无法在virtualenv中安装的问题。
解决方法:可以使用一个脚本来在注册表中注册Python安装,然后再运行Windows安装程序,最后将注册表恢复原样。具体的解决方法如下:
1. 首先,需要下载一个脚本,可以从http://effbot.org/zone/python-register.htm获取。
2. 打开脚本文件,将以下代码复制到文件中:
# -*- encoding: utf-8 -*- # # script to register Python 2.0 or later for use with win32all # and other extensions that require Python registry settings # # Adapted by Ned Batchelder from a script # written by Joakim Löw for Secret Labs AB / PythonWare # # source: # http://www.pythonware.com/products/works/articles/regpy20.htm import sys from _winreg import * # tweak as necessary version = sys.version[:3] installpath = sys.prefix regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version) installkey = "InstallPath" pythonkey = "PythonPath" pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % ( installpath, installpath, installpath ) def RegisterPy(): try: reg = OpenKey(HKEY_LOCAL_MACHINE, regpath) except EnvironmentError: try: reg = CreateKey(HKEY_LOCAL_MACHINE, regpath) except Exception, e: print "*** Unable to register: %s" % e return SetValue(reg, installkey, REG_SZ, installpath) SetValue(reg, pythonkey, REG_SZ, pythonpath) CloseKey(reg) print "--- Python %s at %s is now registered!" % (version, installpath) if __name__ == "__main__": RegisterPy()
3. 使用希望注册的Python版本运行该脚本,脚本将会将Python安装信息写入注册表。请注意,在Windows 7和Vista上,需要管理员权限。
4. 如果使用的是Windows 7 64位系统及64位Python,则需要修改regpath的值:
regpath = "SOFTWARE\\Wow6432Node\\Python\\Pythoncore\\%s\\" % (version)
5. 在Windows 7 64位系统上,也可以保持regpath的原值,可能会正常工作。可能是因为操作系统版本之间的细微差异或某些设置不同。
6. Batchelder的解决方案是唯一有效的解决方法。使用wheel安装方法无法解决问题。可能会收到包下载错误的消息(请参阅对该答案的评论以获取更多详细信息)。建议使用easy_install二进制安装程序,但是我无法让easy_install找到binary_installer...exe文件。
可以在虚拟环境中安装Python Windows包吗?
是的,你可以。你只需要
easy_install binary_installer_built_with_distutils.exe
惊讶吗?看起来使用distutils制作的Windows的二进制安装程序将.exe和.zip结合到一个.exe文件中。将扩展名更改为.zip,看看它是一个有效的zip文件。在阅读我的问题的答案之后,我发现了这一点。Where can I download binary eggs with psycopg2 for Windows?
更新
正如Tritium21在他的答案中指出的那样,现在你应该使用pip而不是easy_install。Pip不能安装由distutils创建的二进制软件包,但它可以安装新的wheel格式的二进制软件包。您可以使用wheel软件包将旧格式转换为新格式,您需要先安装它。
我同意,这很棒。顺便说一句,如果你有7zip,你可以直接打开.exe文件,而不必将其重命名为zip。
只是一个提示:开发人员可以从lfd.uci.edu/~gohlke/pythonlibs下载各种已构建的Python Windows包。
您可以这样做,因为这不是我在SO上的唯一答案,我还有其他答案可能对您有帮助 🙂
我得到了以下结果:搜索binary-installer-built-with-distutils.exe 读取pypi.python.org/simple/… 读取pypi.python.org/simple/… 无法找到'binary_installer_built_with_distutils.exe'的索引页面 扫描所有软件包的索引(可能需要一段时间) 读取pypi.python.org/simple 没有找到本地软件包或下载链接binary-installer-built-with-distutils.exe 错误:找不到适合的分发来满足Requirement.parse('binary-instal ler-built-with-d...
Paul,他所指的exe文件将根据您使用的安装程序而有所不同...不是字面上的"binary-installer-built-with-distutils.exe"
在OSX上怎么做呢?
应该指出使用easy_install存在一些严重的缺点,包括安全性、无法使用wheels(实际上是一种标准的新格式)、增加的导入时间(安装很多egg会大大减慢导入过程)。