我可以将Python的Windows包安装到虚拟环境中吗?

18 浏览
0 Comments

我可以将Python的Windows包安装到虚拟环境中吗?

Virtualenv非常好用:它让我能够保留多个独立的Python安装,这样不同项目的依赖就不会都被混在一起放在一个共享堆中。\n但是如果我想在Windows上安装一个打包为.exe安装程序的包,我该如何指示它安装到虚拟环境中?例如,我有一个名为pycuda-0.94rc.win32-py2.6.exe的包。当我运行它时,它会检查注册表,只找到一个Python26可供安装,即我基于的共享虚拟环境。\n我该如何指示它安装到虚拟环境中呢?

0
0 Comments

原因:在Windows上安装Python的包时,可能会遇到无法在virtualenv中安装的问题。

解决方法:可以使用一个脚本来在注册表中注册Python安装,然后再运行Windows安装程序,最后将注册表恢复原样。具体的解决方法如下:

1. 首先,需要下载一个脚本,可以从http://effbot.org/zone/python-register.htm获取。

2. 打开脚本文件,将以下代码复制到文件中:

# -*- 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()

3. 使用希望注册的Python版本运行该脚本,脚本将会将Python安装信息写入注册表。请注意,在Windows 7和Vista上,需要管理员权限。

4. 如果使用的是Windows 7 64位系统及64位Python,则需要修改regpath的值:

regpath = "SOFTWARE\\Wow6432Node\\Python\\Pythoncore\\%s\\" % (version)

5. 在Windows 7 64位系统上,也可以保持regpath的原值,可能会正常工作。可能是因为操作系统版本之间的细微差异或某些设置不同。

6. Batchelder的解决方案是唯一有效的解决方法。使用wheel安装方法无法解决问题。可能会收到包下载错误的消息(请参阅对该答案的评论以获取更多详细信息)。建议使用easy_install二进制安装程序,但是我无法让easy_install找到binary_installer...exe文件。

0
0 Comments

问题:我可以将Python Windows包安装到虚拟环境中吗?

0
0 Comments

可以在虚拟环境中安装Python Windows包吗?

是的,你可以。你只需要

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软件包将旧格式转换为新格式,您需要先安装它。

我同意,这很棒。顺便说一句,如果你有7zip,你可以直接打开.exe文件,而不必将其重命名为zip。

只是一个提示:开发人员可以从lfd.uci.edu/~gohlke/pythonlibs下载各种已构建的Python Windows包。

您可以这样做,因为这不是我在SO上的唯一答案,我还有其他答案可能对您有帮助 🙂

我得到了以下结果:搜索binary-installer-built-with-distutils.exe 读取pypi.python.org/simple/… 读取pypi.python.org/simple/… 无法找到'binary_installer_built_with_distutils.exe'的索引页面 扫描所有软件包的索引(可能需要一段时间) 读取pypi.python.org/simple 没有找到本地软件包或下载链接binary-installer-built-with-distutils.exe 错误:找不到适合的分发来满足Requirement.parse('binary-instal ler-built-with-d...

Paul,他所指的exe文件将根据您使用的安装程序而有所不同...不是字面上的"binary-installer-built-with-distutils.exe"

在OSX上怎么做呢?

应该指出使用easy_install存在一些严重的缺点,包括安全性、无法使用wheels(实际上是一种标准的新格式)、增加的导入时间(安装很多egg会大大减慢导入过程)。

0