我可以将Python Windows软件包安装到virtualenvs中吗?

Virtualenv是伟大的:它允许我保留一些独特的Python安装,以便不同的项目的依赖不是所有的东西都扔在一起。

但是,如果我想在Windows上安装打包成.exe安装程序的软件包,那么我怎样才能将其安装到virtualenv中? 例如,我有pycuda-0.94rc.win32-py2.6.exe。 当我运行它时,它检查registry,并且find只有一个Python26安装到,我的virtualenv基于的常见的。

我怎样才能把它安装到virtualenv?

是的你可以。 所有你需要的是

easy_install binary_installer_built_with_distutils.exe

惊讶吗? 它看起来像使用distutils的Windows二进制安装程序结合.exe与.zip到一个.exe文件。 将扩展名更改为.zip以查看它是一个有效的zip文件。 在阅读我的问题的答案后我发现了这个问题在哪里可以下载psycopg2 for windows的二进制文件?

UPDATE

正如Tritium21在他的回答中指出的那样,您应该使用pip而不是easy_install。 Pip不能安装由distutils创build的二进制包,但它可以以新的轮子格式安装二进制包。 您可以使用wheel软件包将旧格式转换为新格式,您必须先安装这个软件包。

我知道这是一个相当古老的问题,并且早于我即将谈论的工具,但为了Google的缘故,我认为这是一个好主意。 easy_install是python包装的黑羊。 没有人愿意承认使用它周围的新热点。 另外,玩registry技巧时,对于非标准的EXE安装程序(某些人自己构build安装程序,而不是使用distutils,并且正在检查registry中的安装path),对于标准EXE安装程序,现在有更好的方法(c) 。

pip install wheel wheel convert INSTALLER.EXE pip install NEW_FILE_CREATED_IN_LAST_STEP.whl 

最近作为这篇文章介绍的轮子格式是鸡蛋格式的替代品,填补了许多相同的angular色。 这个格式也支持pip(一个已经安装在你的virtualenv中的工具)。

如果由于某种原因pip install WHEELFILE不起作用,请尝试wheel install WHEELFILE

我最终调整了脚本( http://effbot.org/zone/python-register.htm )在registry中注册Python安装。 我可以selectPython作为registry中 Python,运行Windows安装程序,然后设置registry:

 # -*- 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运行这个脚本,它将被input到registry中。 请注意,在Windows 7和Vista上,您将需要pipe理员权限。

easy_install能够安装.exe软件包,只要它们是使用distutils的bdist_wininst目标来构build的,它涵盖了许多stream行的软件包。 然而,还有很多其他的(wxPython是我一直在努力的)

您可以使用环境的easy_install来安装PyCUDA。

 dev-env-path/bin/easy_install pycuda 

它会给你相同的版本0.94rc。

在Windows上,easy_install.exe将位于脚本目录中。

如果是.msi ,则可以使用msiexec指定命令行选项。 Python 安装程序本身允许TARGETDIR ,但我不确定distutils是否将其烧制到发行版安装程序中。

如果您使用.exe ,我不认为有一个干净的方法。 一个select是使用像7Zip(或winzip等)的程序来直接提取exe的内容,然后将相关文件夹复制到您的虚拟站点包文件夹中。 例如,如果我提取“processing-0.5.2.win32-py2.5.exe”,我find一个文件夹“PLATLIB \ processing”,我将其复制到一个virtualenvpath中,并且没有任何运行时问题。 (我不确定这总是那么简单。)