Czy Mogę zainstalować Pakiety Pythona windows w virtualenvs?

Virtualenv jest świetny: pozwala mi zachować wiele odrębnych instalacji Pythona, aby zależności różnych projektów nie były rzucane razem w jeden wspólny stos.

Ale jeśli chcę zainstalować pakiet na Windows, który jest pakowany jako .Exe installer, Jak mogę skierować go do instalacji w virtualenv? Na przykład mam pycuda-0.94 rc.win32-py2. 6.exe. Kiedy go uruchamiam, bada rejestr i znajduje tylko jeden Python26 do zainstalowania, ten wspólny, który jest moim virtualenv na podstawie.

Jak mogę skierować go do instalacji w virtualenv?

Author: Ned Batchelder, 2010-07-17

6 answers

Tak, możesz. Wszystko czego potrzebujesz to

Easy_install binary_installer_built_with_distutils.exe

Zaskoczony? Wygląda to jak binarne instalatory dla Windows wykonane z distutils combine .exe z .zapnij w jeden .plik exe. Zmień rozszerzenie na .zip, aby zobaczyć, że jest to poprawny plik zip. Odkryłem to po przeczytaniu odpowiedzi na moje pytanie Gdzie mogę pobrać binarne jaja z psycopg2 Dla Windows?

UPDATE

Jak zauważył Tritium21 w odpowiedzi w dzisiejszych czasach powinieneś używać pip zamiast easy_install. Pip nie może instalować pakietów binarnych utworzonych przez distutils, ale może instalować pakiety binarne w nowym formacie wheel . Możesz przekonwertować ze starego formatu na Nowy za pomocą pakietu wheel , który musisz najpierw zainstalować.

 200
Author: Piotr Dobrogost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:39

Wiem, że to dość stare pytanie i poprzedza narzędzia, o których mam mówić, ale ze względu na Google, myślę, że to dobry pomysł, aby o tym wspomnieć. easy_install to czarna owca python packaging. Nikt nie chce przyznać, że używa go z nową gorącą pip wokół. Ponadto, podczas wykonywania sztuczek rejestru będzie działać najlepiej dla niestandardowych instalatorów EXE (ktoś zbudował instalator samodzielnie zamiast używać distutils i sprawdza rejestr pod kątem ścieżki instalacji), istnieje teraz lepszy sposób (c) dla standardowych instalatorów EXE.

pip install wheel
wheel convert INSTALLER.EXE
pip install NEW_FILE_CREATED_IN_LAST_STEP.whl
Format koła, wprowadzony niedawno w tym poście, jest zamiennikiem formatu egg, wypełniającego tę samą rolę. Ten format jest również obsługiwany przez pip (narzędzie już zainstalowane w virtualenv).

Jeśli z jakiegoś powodu pip install WHEELFILE nie działa, spróbuj wheel install WHEELFILE

 70
Author: Tritium21,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-09 23:05:48

Skończyłem adaptując skrypt ( http://effbot.org/zone/python-register.htm ) aby zarejestrować instalację Pythona w rejestrze. Mogę wybrać Python jako Python w rejestrze, uruchomić instalator Windows, a następnie ustawić rejestr z powrotem:

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

Uruchom ten skrypt z Pythonem, który chcesz zarejestrować, a zostanie on wprowadzony do rejestru. Pamiętaj, że w systemach Windows 7 i Vista będziesz potrzebować uprawnień administratora.

 40
Author: Ned Batchelder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-17 20:41:43

Easy_install jest w stanie zainstalować .Pakiety exe, o ile były budowane przy użyciu docelowego bdist_wininst distutils, który obejmuje wiele popularnych pakietów. Jednak jest wiele innych, które nie są (wxPython to taki, z którym walczyłem)

 7
Author: Simon King,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-18 08:52:40

Możesz użyć środowiska easy_install do zainstalowania PyCUDA.

dev-env-path/bin/easy_install pycuda

Da ci tę samą wersję 0.94 rc.

W systemie Windows easy_install.exe będzie w katalogu skryptów.

 0
Author: simplyharsh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-17 13:38:06

Jeśli jest to .msi, możesz określić opcje wiersza poleceń za pomocą msiexec. Python instalator sam pozwala TARGETDIR, ale nie jestem pewien, czy distutils przerabia to na instalatory dystrybucji.

Jeśli używasz .exe, myślę, że nie ma czystego sposobu. Jedną z opcji jest użycie programu takiego jak 7zip (lub winzip itp.), aby bezpośrednio wyodrębnić zawartość exe, a następnie skopiować odpowiednie foldery do folderu virtual site-packages. Na przykład, jeśli wyodrębnię "przetwarzanie-0.5.2.win32-py2. 5.exe", znajduję folder "PLATLIB\processing", który kopiuję do ścieżki virtualenv i używam bez żadnych problemów runtime. (Nie jestem pewien, czy to zawsze takie proste.)

 0
Author: ars,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-17 17:20:11