Чи можу я встановити пакети Windows Python у virtualenvs?


125

Virtualenv чудовий: він дозволяє мені зберігати ряд чітких установок Python, щоб залежність різних проектів не була об'єднана в загальну купу.

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

Як я можу направити його на встановлення у virtualenv?


1
відповідь нижче працює для мене stackoverflow.com/questions/6114115 / ...
user1960422

Відповіді:


201

Так, ти можеш. Все, що тобі потрібно, це

easy_install binary_installer_built_with_distutils.exe

Здивувались? Схоже, що двійкові інсталятори для Windows, виконані з distutils, поєднують .exe з .zip в один .exe-файл. Змініть розширення на .zip, щоб побачити, чи дійсний поштовий файл. Я виявив це, прочитавши відповіді на моє запитання Де можна завантажити бінарні яйця з psycopg2 для Windows?

ОНОВЛЕННЯ

Як зазначає Tritium21 у своїй відповіді, сьогодні вам слід використовувати pip замість easy_install. Pip не може встановити бінарні пакунки, створені distutils, але він може встановити бінарні пакунки у новому форматі колеса . Ви можете конвертувати зі старого формату в новий за допомогою колесного пакета, який потрібно встановити спочатку.


2
Я згоден, це чудово. До речі, якщо у вас 7zip, ви можете відкрити .exe безпосередньо, не перейменовуючи його як zip.
Сабунку

5
лише порада: розробники можуть завантажувати різні вбудовані пакети python для Windows з lfd.uci.edu/~gohlke/pythonlibs .
Янж

@CodyHatch Ви можете, оскільки це не єдина моя відповідь на ТАК, і є ймовірність, що деякі інші мої відповіді також будуть корисними для вас :)
Piotr Dobrogost

1
Я отримую наступне: Пошук 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 ('binar-install ler-built-with-d ...
Paul

1
Пол, приклад, про який він посилається, буде відрізнятися залежно від того, який інсталятор ви використовуєте ... не буквально "binary-installer-built-with-distutils.exe"
Tristan Reid

70

Я знаю, що це досить давнє питання, і він передує інструментам, про який я збираюся поговорити, але заради Google я думаю, що це гарна ідея згадати його. easy_install - це чорна вівця з упаковки пітона. Ніхто не хоче визнати, що використовує його з новою жаркістю піп. Крім того, під час відтворення трюків реєстру найкраще працюватимуть для нестандартних установців 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


Дякую за це Сподіваємось, більше людей помітять вашу відповідь та заяву!
Бретт Стоттлмайер

Щоб було зрозуміло. Ви можете створити .whl з .exe, наприклад, з lfd.uci.edu/~gohlke/pythonlibs , використовуючи це. Це ВЕЛИЧЕЗНІ терміни розгортання!
Йонас Грьогер

Я намагався це зробити, але отримав колесо помилки перетворити numpy-MKL-1.8.1.win-amd64-py2.7.exe, а потім встановити pip 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

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)
Олексій

Насправді для мого Windows 7, 64-бітного, я залишив regpath як є, і він спрацював. Мод @Oleksiy запропонований не працює. Можливо, деякі тонкі різні в нашій версії ОС, або деякі налаштування.
Пол

Рішення @Ned Batchelder було єдиним, хто працював на мене. Установка колеса не спрацювала. Я все ще отримав помилки при завантаженні пакета (детальніше див. Мій коментар до цієї відповіді). Пропозиція зробити easy_install binary_installer ... можливо, спрацювала, але мені не вдалося отримати easy_install, щоб знайти файл binary_installer ... exe.
Пол,

7

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


Так, і поки ви встановили будь-який пакет розробок усіх залежностей. У моєму випадку pycuda потребує Boost та CUDA, а не банальне завдання.
Нед Батчелдер

1
@Ned Batchelder Так, і поки ви встановили будь-який пакет розробок усіх залежностей. Що ж, бінарний інсталятор не встановлює також усіх залежностей, чи не так?
Пьотр Доброгост

0

Для установки PyCUDA можна використовувати середовище easy_install оточення.

dev-env-path/bin/easy_install pycuda

це дасть вам ту ж версію 0.94rc.

У Windows easy_install.exe буде в каталозі Scripts.


1
На жаль, це спробують побудувати з джерела. Я сподівався використати заздалегідь створені бінарні файли.
Нед Батчелдер

0

Якщо це a .msi, ви, можливо, зможете вказати параметри командного рядка, використовуючи msiexec. Сам інсталятор Python дозволяє TARGETDIR, але я не впевнений, чи distutils використовує це для інсталяторів дистрибуції.

Якщо ви використовуєте .exe, я не думаю, що існує чистий спосіб. Один із варіантів - використовувати програму на зразок 7Zip (або winzip тощо), щоб безпосередньо витягнути вміст файлу exe, а потім скопіювати папки, що відносяться, у вашу віртуальну папку пакетів сайтів. Наприклад, якщо я витягаю "обробка-0.5.2.win32-py2.5.exe", я знаходжу папку "PLATLIB \ обробка", яку копіюю в шлях virtualenv і використовую без проблем виконання. (Я не впевнений, що це завжди так просто.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.