繁体   English   中英

我可以将 Python windows 包安装到 virtualenvs 中吗?

[英]Can I install Python windows packages into virtualenvs?

Virtualenv 很棒:它让我可以保留多个不同的 Python 安装,这样不同项目的依赖项就不会全部扔到一起。

但是,如果我想在 Windows 上安装一个 package ,它被打包为一个 .exe 安装程序,我该如何引导它安装到 virtualenv 中? 比如我有pycuda-0.94rc.win32-py2.6.exe。 当我运行它时,它会检查注册表,并发现只有一个 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创建的二进制包,但它可以以新的轮子格式安装二进制包。 您可以使用wheel包将旧格式转换为新格式,您必须先安装。

我知道这是一个相当古老的问题,并且早于我将谈论的工具,但是为了Google,我认为提及它是个好主意。 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

我最终调整了一个脚本( 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上,您需要管理员权限。

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

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

dev-env-path/bin/easy_install pycuda

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

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

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

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

您应该键入文件的路径并在其前面写上“python”。

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

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM