Могу ли я установить пакеты окон Python в virtualenvs?
Virtualenv велик: он позволяет мне хранить несколько различных установок Python, чтобы разные зависимости проектов не были объединены в общую кучу.
Но если я хочу установить пакет в Windows, который упакован как .exe-установщик, как я могу направить его для установки в virtualenv? Например, у меня есть pycuda-0.94rc.win32-py2.6.exe. Когда я запускаю его, он проверяет реестр и находит только один Python26 для установки, общий, из которого мой virtualenv основан.
Как я могу направить его для установки в virtualenv?
Ответы
Ответ 1
Я закончил адаптацию script (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()
Запустите этот script с помощью Python, который вы хотите зарегистрировать, и он будет внесен в реестр. Обратите внимание, что в Windows 7 и Vista вам понадобятся права администратора.
Ответ 2
Да, вы можете. Все, что вам нужно, это
easy_install binary_installer_built_with_distutils.exe
Удивлены? Похоже, двоичные установщики для Windows, сделанные с distutils, объединяют .exe с .zip в один файл .exe. Измените расширение на .zip, чтобы увидеть его действительным zip файлом. Я обнаружил это после прочтения ответов на мой вопрос Где можно загрузить бинарные яйца с помощью psycopg2 для Windows?
ОБНОВЛЕНИЕ
Как отметил Tritium21 в своем ответе в настоящее время, вы должны использовать pip вместо easy_install. Пип не может устанавливать бинарные пакеты, созданные distutils, но он может устанавливать бинарные пакеты в новом формате wheel. Вы можете конвертировать из старого формата в новый, используя wheel пакет, который вы должны установить первым.
Ответ 3
Я знаю, что это довольно старый вопрос и предшествует инструментам, о которых я собираюсь поговорить, но, ради 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
Ответ 4
easy_install может устанавливать пакеты .exe, если они были созданы с использованием функции distdils bdist_wininst, которая охватывает многие популярные пакеты. Тем не менее, есть много других, которые не являются (wxPython - это тот, с которым я боролся)
Ответ 5
Вы можете использовать среду easy_install для установки PyCUDA.
dev-env-path/bin/easy_install pycuda
он даст вам ту же версию 0.94rc.
В Windows easy_install.exe будет находиться в каталоге Scripts.
Ответ 6
Если это .msi
, вы можете указать параметры командной строки, используя msiexec
. Сам Python установщик позволяет TARGETDIR
, но я не уверен, что distutils выпекает это в установщиках дистрибутива.
Если вы используете .exe
, я не думаю, что там чистый путь. Один из вариантов - использовать программу типа 7Zip (или winzip и т.д.) Для непосредственного извлечения содержимого exe, а затем скопировать соответствующие папки в папку виртуальных сайтов. Например, если я извлекаю "processing-0.5.2.win32-py2.5.exe", я нахожу папку "PLATLIB\processing", которую я копирую на виртуальный путь и использую без каких-либо проблем времени выполнения. (Я не уверен, что это всегда так просто.)