Can I install Python windows packages into virtualenvs?
virtualenv非常棒:它让我保留了许多不同的python安装,这样不同项目的依赖关系就不会全部被扔到一个公共堆中。
但是,如果我想在Windows上安装一个打包为.exe安装程序的包,我该如何引导它安装到virtualenv中呢?例如,我有pycuda-0.94rc.win32-py2.6.exe。当我运行它时,它检查注册表,只找到一个要安装的python26,这是我的virtualenv所基于的公共python26。
如何引导它安装到virtualenv中?
是的,你可以。你所需要的只是
easy_install
binary_installer_built_with_distutils.exe
惊讶?它看起来像是用distutils制作的用于Windows的二进制安装程序将.exe和.zip合并到一个.exe文件中。将扩展名改为.zip以查看它是有效的zip文件。在阅读了我的问题答案之后,我发现了这一点:在哪里可以下载带有psycopg2 for Windows的二进制鸡蛋?
更新
正如Tritium21在他的回答中所指出的,现在你应该使用pip而不是简单的安装。pip无法安装distutils创建的二进制软件包,但可以以新的wheel格式安装二进制软件包。您可以使用轮盘包从旧格式转换为新格式,必须先安装轮盘包。
我知道这是一个很古老的问题,早于我将要讨论的工具,但是为了谷歌,我认为提到它是个好主意。易安装是Python包装的败类。没有人愿意承认使用它与新的热点周围的pip。另外,虽然对非标准的exe安装程序(有人自己构建了安装程序,而不是使用distutils,并且正在检查注册表中的安装路径)使用注册表技巧效果最好,但现在有了一种更好的方法(c)来安装标准的exe安装程序。
1 2 3 | pip install wheel wheel convert INSTALLER.EXE pip install NEW_FILE_CREATED_IN_LAST_STEP.whl |
从这篇文章开始,最近引入的轮式格式,是鸡蛋格式的替代品,填补了几乎相同的角色。PIP(已经安装在virtualenv中的工具)也支持这种格式。
如果由于某种原因,
我最终修改了一个脚本(http://effbot.org/zone/python-register.htm)来在注册表中注册一个python安装。我可以在注册表中选择python作为python,运行Windows安装程序,然后重新设置注册表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | # -*- 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() |
用要注册的python运行这个脚本,它将被输入注册表。请注意,在Windows7和Vista上,您需要管理员权限。
轻松安装可以安装.exe包,只要它们是使用distutils的bdist-wininst-target构建的,它涵盖了许多流行的包。然而,还有很多其他的人没有(Wxpython是我一直在努力的一个)
如果是
如果你用的是
您可以使用环境的轻松安装来安装pycuda。
1 | dev-env-path/bin/easy_install pycuda |
它将提供相同版本的0.94rc。
在Windows上,easy_install.exe将位于脚本目录中。