Могу ли я установить пакеты Python для windows в virtualenvs? - PullRequest
124 голосов
/ 17 июля 2010

Virtualenv великолепен: он позволяет мне хранить несколько отдельных установок Python, чтобы зависимости разных проектов не были объединены в общую кучу.

Но если я хочу установить в Windows пакет, упакованный как установщик .exe, как я могу направить его для установки в virtualenv? Например, у меня есть pycuda-0.94rc.win32-py2.6.exe. Когда я запускаю его, он проверяет реестр и находит только один Python26 для установки, общий, на котором основан мой virtualenv.

Как я могу направить его для установки в virtualenv?

Ответы [ 6 ]

200 голосов
/ 26 марта 2011

Да, вы можете. Все, что вам нужно, это

easy_install binary_installer_built_with_distutils.exe

Удивлены? Похоже, бинарные установщики для Windows, созданные с помощью distutils, объединяют .exe с .zip в один файл .exe. Измените расширение на .zip, чтобы увидеть, что это правильный файл zip. Я обнаружил это после прочтения ответов на мой вопрос Где я могу скачать бинарные яйца с psycopg2 для Windows?

UPDATE

Как отметил Tritium21 в своем ответе, в настоящее время вы должны использовать pip вместо easy_install. Pip не может устанавливать бинарные пакеты, созданные distutils, но он может устанавливать бинарные пакеты в новом формате wheel . Вы можете конвертировать из старого формата в новый, используя пакет wheel , который необходимо установить первым.

70 голосов
/ 02 декабря 2013

Я знаю, что это довольно старый вопрос, и он предшествует инструментам, о которых я собираюсь поговорить, но ради 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

40 голосов
/ 18 июля 2010

Я закончил адаптацией скрипта (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 вам потребуются права администратора.

7 голосов
/ 18 июля 2010

easy_install может устанавливать пакеты .exe, если они были собраны с использованием цели distutils bdist_wininst, которая охватывает многие популярные пакеты.Однако, есть много других, которых нет (wxPython - это тот, с которым я боролся)

0 голосов
/ 17 июля 2010

Если это .msi, вы можете указать параметры командной строки, используя msiexec. Установщик Python сам по себе разрешает TARGETDIR, но я не уверен, запустит ли distutils это в установщики распространения.

Если вы используете .exe, я не думаю, что есть чистый способ. Один из вариантов - использовать такую ​​программу, как 7Zip (или winzip и т. Д.), Чтобы непосредственно извлечь содержимое exe-файла, а затем скопировать соответствующие папки в папку виртуальных пакетов сайта. Например, если я извлекаю «processing-0.5.2.win32-py2.5.exe», я нахожу папку «PLATLIB \ processing», которую копирую в путь virtualenv и использую без проблем во время выполнения. (Я не уверен, что это всегда так просто.)

0 голосов
/ 17 июля 2010

Вы можете использовать среду easy_install для установки PyCUDA.

dev-env-path/bin/easy_install pycuda

Это даст вам ту же версию 0.94rc.

В Windows easy_install.exe будет в каталоге Scripts.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...