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


125

Virtualenv很棒:它可以让我保留许多不同的Python安装,这样就不会将不同项目的依赖项放在一起。

但是,如果要在以.exe安装程序打包的Windows上安装软件包,如何将其定向安装到virtualenv中?例如,我有pycuda-0.94rc.win32-py2.6.exe。当我运行它时,它会检查注册表,并仅找到一个要安装到我的virtualenv所基于的通用Python26中。

如何引导它安装到virtualenv中?


Answers:


201

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

easy_install binary_installer_built_with_distutils.exe

惊讶吗 看起来用distutils制作的Windows二进制安装程序将.exe和.zip合并为一个.exe文件。将扩展名更改为.zip以查看它是有效的zip文件。在阅读我的问题的答案后,我发现了这一点。在哪里可以从Windows下载带有psycopg2的二进制鸡蛋?

更新

正如Tritium21在他今天的回答中指出的那样,您应该使用pip代替easy_install。Pip无法安装distutils创建的二进制软件包,但可以在新版本中安装二进制软件包 wheel格式的。您可以使用滚轮套件将旧格式转换为新格式,必须先安装。


2
我同意,这很好。顺便说一句,如果您使用的是7zip,则可以直接打开.exe,而不必将其重命名为zip。
萨本库(Sabuncu)2012年

5
提示:开发人员可以从lfd.uci.edu/~gohlke/pythonlibs下载适用于Windows的各种内置python软件包 。
yangzh

@CodyHatch您可以这样做,因为这不是我的唯一答案,而且我的其他一些答案也可能对您有所帮助:)
Piotr Dobrogost

1
我得到以下信息:搜索binary-installer- build -with-distutils.exe阅读pypi.python.org/simple / ...阅读pypi.python.org/simple / ...无法找到“ binary_installer_built_with_distutils.exe”的索引页扫描所有软件包的索引(这可能需要一段时间)阅读pypi.python.org/simple没有找到本地软件包或下载链接,发现二进制安装程序内置的distutils.exe错误:找不到Requirement.parse的合适发行版('bin-instal ler ler-with-d ...
Paul

1
Paul,他所指的exe会有所不同,具体取决于您所使用的安装程序...不是字面意义上的“ binary-installer-built-with-distutils.exe”
Tristan Reid

70

我知道这是一个很老的问题,并且早于我要谈论的工具,但是对于Google而言,我认为提这个问题是个好主意。easy_install是python包装的败类。没有人愿意承认使用这种新的流行点子。同样,尽管玩注册表技巧对于非标准EXE安装程序最为有效(有人自己安装了安装程序而不是使用distutils,并正在检查注册表中的安装路径),但现在有一种更好的方法用于标准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


谢谢你 希望更多的人注意到您的回答并投票!
Brett Stottlemyer 2014年

要清楚。您可以从.exe,例如从lfd.uci.edu/~gohlke/pythonlibs创建.whl 。这是巨大的部署条件!
JonasGröger2014年

我试图做到这一点,但遇到了一个错误轮转换numpy-MKL-1.8.1.win-amd64-py2.7.exe然后点子安装numpy-1.8.1-cp27-none-win_amd64.whl我得到以下错误下载/解压缩numpy-1.8.1-cp27-none-win-amd64.whl找不到符合要求numpy-1.8.1-cp27-non e-win-amd64.whl的任何下载文件找不到numpy的所有发行版-1.8.1-cp27-none-win-amd64.whl
保罗

试试看wheel install WHEELFILE,答案编辑指出了它的存在。为某人调试特定问题并不是在SO注释中轻松完成的事情。
Tritium21年

仅出于此目的需要多次easy_install之后,就很漂亮了。*告别easy_install
KobeJohn,2014年

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


1
在Windows 7上,64位和64位Python必须将regpath修改为regpath = "SOFTWARE\\Wow6432Node\\Python\\Pythoncore\\%s\\" % (version)
Oleksiy,

实际上,对于我的Windows 7(64位),我按原样保留了regpath,并且它起作用了。建议的@Oleksiy mod无效。在我们的操作系统版本或某些设置上可能有些细微的差异。
2014年

@Ned Batchelder的解决方案是唯一对我有用的解决方案。车轮安装不起作用。我仍然收到程序包下载错误(有关更多详细信息,请参阅我的评论)。进行easy_install binary_installer ...的建议可能已经奏效,但是我无法让easy_install找到binary_installer ... exe文件。
Paul

7

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


是的,只要您安装了所有依赖项的任何开发包。就我而言,pycuda需要Boost和CUDA,而不是一项艰巨的任务。
Ned Batchelder

1
@Ned Batchelder 是的,只要您安装了所有依赖项的开发包即可。好吧,二进制安装程序也不会安装所有依赖项,不是吗?
Piotr Dobrogost 2011年

0

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

dev-env-path/bin/easy_install pycuda

它将为您提供相同的0.94rc版本。

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


1
不幸的是,这将尝试从源代码构建。我希望使用预构建的二进制文件。
内德·巴切尔德

0

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

如果您使用.exe,我认为没有一种干净的方法。一种选择是使用诸如7Zip(或winzip等)之类的程序直接提取exe的内容,然后将relevent文件夹复制到您的虚拟site-packages文件夹中。例如,如果我解压缩“ processing-0.5.2.win32-py2.5.exe”,则会找到一个文件夹“ PLATLIB \ processing”,将其复制到virtualenv路径并可以使用,而不会出现任何运行时问题。(我不确定这是否总是那么简单。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.