ambiente - Posso instalar pacotes do windows Python em virtualenvs?



install python on windows (4)

O Virtualenv é ótimo: ele me permite manter um número de instalações Python distintas para que as dependências de projetos diferentes não sejam todas juntas em uma pilha comum.

Mas se eu quiser instalar um pacote no Windows empacotado como um instalador do .exe, como posso direcioná-lo para instalar no virtualenv? Por exemplo, eu tenho pycuda-0.94rc.win32-py2.6.exe. Quando eu o executo, ele examina o registro e encontra apenas um Python26 para instalar, o mais comum do qual o meu virtualenv é baseado.

Como posso direcioná-lo para instalar no virtualenv?

https://ffff65535.com


Acabei adaptando um script ( http://effbot.org/zone/python-register.htm ) para registrar uma instalação do Python no registro. Eu posso escolher o Python para ser o Python no registro, executar o instalador do Windows e, em seguida, definir o registro de volta:

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

Execute este script com o Python que você deseja registrar e ele será inserido no registro. Observe que no Windows 7 e no Vista, você precisará de privilégios de administrador.


Eu sei que esta é uma questão bastante antiga e antecede as ferramentas que estou prestes a falar, mas por causa do Google, eu acho que é uma boa idéia mencioná-lo. easy_install é a ovelha negra da embalagem python. Ninguém quer admitir usá-lo com o novo hotness de pip por aí. Além disso, durante a execução de truques de registro funcionará melhor para instaladores de EXE não padrão (alguém construiu o próprio instalador em vez de usar distutils e está verificando o registro para o caminho de instalação), agora há uma Better Way (c) para instaladores de EXE padrão .

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

O formato de roda, introduzido recentemente a partir deste post, é o substituto para o formato de ovo, preenchendo o mesmo papel. Este formato também é suportado pelo pip (uma ferramenta já instalada no seu virtualenv).

Se por algum motivo a pip install WHEELFILE não funcionar, tente wheel install WHEELFILE


Se for um .msi , você poderá especificar opções de linha de comando usando msiexec . O próprio installer Python permite TARGETDIR , mas não tenho certeza se o distutils faz isso em instaladores de distribuição.

Se você estiver usando um .exe , não acho que haja um caminho limpo. Uma opção é usar um programa como o 7Zip (ou winzip, etc) para extrair diretamente o conteúdo do exe, depois copiar as pastas relevantes para a pasta virtual-site-packages. Por exemplo, se eu extrair "processing-0.5.2.win32-py2.5.exe", localizarei uma pasta "PLATLIB \ processing" que copio para um caminho virtualenv e uso sem nenhum problema de tempo de execução. (Eu não tenho certeza que é sempre assim tão simples.)


Sim você pode. Tudo o que você precisa é

easy_install binary_installer_built_with_distutils.exe

Surpreso? Parece que instaladores binários para Windows feitos com distutils combinam .exe com .zip em um arquivo .exe. Altere a extensão para .zip para ver se é um arquivo zip válido. Eu descobri isso depois de ler as respostas à minha pergunta Onde posso baixar os ovos binários com psycopg2 para o Windows?

ATUALIZAR

Como observado por Tritium21 em sua resposta hoje em dia você deve usar pip em vez de easy_install. Pip não pode instalar pacotes binários criados por distutils, mas pode instalar pacotes binários no novo formato de wheel . Você pode converter do formato antigo para o novo usando o pacote wheel , que você precisa instalar primeiro.





virtualenv