我可以将 Python Windows 包安装到 viralenvs 中吗?

Virtualenv 非常棒: 它允许我保留许多不同的 Python 安装,这样不同项目的依赖关系就不会被放在一起堆成一堆。

但是,如果我想在 Windows 上安装一个打包为。Exe 安装程序,如何将其安装到 viralenv 中?例如,我有 pycuda-0.94rc.win32-py2.6.exe。当我运行它时,它检查注册表,发现只有一个 Python26需要安装,就是我的 viralenv 所基于的那个常见的 Python。

如何将其安装到 Virtual alenv 中?

32627 次浏览

您可以使用环境的 easy _ install 来安装 PyCUDA。

dev-env-path/bin/easy_install pycuda

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

在 Windows easy _ install.exe 上,脚本目录中将包含。

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

如果你使用 .exe,我不认为有一个干净的方法。一种选择是使用类似7Zip (或 winzip 等)的程序直接提取 exe 的内容,然后将相关文件夹复制到您的虚拟站点包文件夹中。例如,如果我解压缩“ Processing-0.5.2.win32-py2.5.exe”,我会找到一个文件夹“ PLATLIB process”,我会将它复制到一个 viralenv 路径,并在没有任何运行时问题的情况下使用它。(但我不确定事情总是那么简单。)

I ended up adapting a script (http://effbot.org/zone/python-register.htm) to register a Python installation in the registry. I can pick the Python to be Python in the registry, run the Windows installer, then set the registry back:

# -*- 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 上,您需要管理员权限。

Easy _ install 能够安装。只要 exe 包是使用 distutils 的 bdist _ wininst 目标构建的,它涵盖了许多流行的包。但是,还有许多其他的语言不是这样的(wxPython 是我一直在努力解决的一个问题)

你可以的,你只需要

Easy _ install binary_installer_built_with_distutils.exe

惊讶吗?它看起来像 Windows 的二进制安装程序与 distutils 组合。与。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。合二为一。Exe 文件。将分机号更改为。来查看它是否是一个有效的 zip 文件。我是在阅读了我的问题 我可以在哪里下载用于 Windows 的 Psycopg2的二进制彩蛋?的答案后发现这一点的

更新

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

I know this is quite an old question, and predates the tools I am about to talk about, but for the sake of Google, I think it is a good idea to mention it. easy_install is the black sheep of python packaging. No one wants to admit using it with the new hotness of pip around. Also, while playing registry tricks will work best for non-standard EXE installers (someone built the installer themselves instead of using distutils, and is checking the registry for the installation path), there is now a Better Way(c) for standard EXE installers.

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

车轮格式,最近推出的这个职位,是替代鸡蛋格式,填补了很多相同的作用。Pip 也支持这种格式(这个工具已经安装在你的 viralenv 中了)。

if for some reason pip install WHEELFILE does not work, try wheel install WHEELFILE

您应该键入文件的路径,并在它之前写上“ python”。

然后它将在没有任何虚拟环境的情况下运行 Python 脚本。

谢谢。