Virtualenv很棒:它让我可以保留许多不同的Python安装,这样不同项目的依赖关系就不会全部集中在一起。
但是如果我想在Windows上安装一个打包为.exe安装程序的软件包,我如何指导它安装到virtualenv?例如,我有pycuda-0.94rc.win32-py2.6.exe。当我运行它时,它会检查注册表,并且只找到一个要安装的Python26,这是我的virtualenv所基于的常见的。
如何指导它安装到virtualenv?
答案 0 :(得分:200)
是的,你可以。你所需要的只是
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包从旧格式转换为新格式,您必须先安装它。
答案 1 :(得分:70)
我知道这是一个相当古老的问题,并且早于我将谈论的工具,但是为了谷歌,我认为提及它是个好主意。 easy_install是python包装的黑羊。没有人愿意承认使用新的热情。此外,虽然播放注册表技巧最适合非标准EXE安装程序(有人自己构建安装程序而不是使用distutils,并且正在检查注册表中的安装路径),现在有一个更好的方法(c)用于标准EXE安装程序
pip install wheel
wheel convert INSTALLER.EXE
pip install NEW_FILE_CREATED_IN_LAST_STEP.whl
最近在本文中介绍的车轮格式是鸡蛋格式的替代品,充当了同样的角色。 pip(已经安装在virtualenv中的工具)也支持这种格式。
如果由于某种原因pip install WHEELFILE
不起作用,请尝试wheel install WHEELFILE
答案 2 :(得分:40)
我最终调整了一个脚本(http://effbot.org/zone/python-register.htm)来在注册表中注册Python安装。我可以在注册表中选择Python Python,运行Windows安装程序,然后重新设置注册表:
# -*- 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运行此脚本,它将被输入注册表。请注意,在Windows 7和Vista上,您需要管理员权限。
答案 3 :(得分:7)
easy_install能够安装.exe软件包,只要它们是使用distutils的bdist_wininst目标构建的,它涵盖了许多流行的软件包。然而,还有许多其他的(wxPython是我一直在努力的)
答案 4 :(得分:0)
您可以使用环境的easy_install来安装PyCUDA。
dev-env-path/bin/easy_install pycuda
它将为您提供相同的版本0.94rc。
在Windows上,easy_install.exe将位于Scripts目录中。
答案 5 :(得分:0)
如果是.msi
,您可以使用msiexec
指定命令行选项。 Python installer本身允许TARGETDIR
,但我不确定distutils是否会将其烘焙到分发安装程序中。
如果您使用.exe
,我认为没有一种干净的方法。一种选择是使用像7Zip(或winzip等)之类的程序直接提取exe的内容,然后将相关文件夹复制到虚拟站点包文件夹中。例如,如果我提取“processing-0.5.2.win32-py2.5.exe”,我找到一个文件夹“PLATLIB \ processing”,我将其复制到virtualenv路径并使用,没有任何运行时问题。 (我不确定它总是那么简单。)