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?
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ć.
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
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.
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)
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.
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.)
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