Jaka jest różnica między venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, itp?
Python 3.3 zawiera w swojej bibliotece standardowej nowy pakiet venv
. Co to robi i czym różni się od wszystkich innych pakietów, które wydają się pasować do regex (py)?(v|virtual|pip)?env
?
2 answers
Pakiety PyPI Nie w bibliotece standardowej:
-
virtualenv
jest bardzo popularnym narzędziem, które tworzy izolowane środowiska Pythona dla bibliotek Pythona. Jeśli nie jesteś zaznajomiony z tym narzędziem, Gorąco polecam go nauczyć, ponieważ jest to bardzo przydatne narzędzie, i będę robić porównania do niego do końca tej odpowiedzi.Działa instalując kilka plików w katalogu (np.:
env/
), a następnie modyfikując zmienną środowiskowąPATH
do prefix to z niestandardowym katalogiembin
(np:env/bin/
). Dokładna kopia pliku binarnegopython
lubpython3
jest umieszczona w tym katalogu, ale Python jest zaprogramowany, aby najpierw szukać bibliotek względem swojej ścieżki, w katalogu środowiska. Nie jest częścią standardowej biblioteki Pythona, ale jest oficjalnie pobłogosławiony przez PyPA (Python Packaging Authority). Po aktywacji można zainstalować pakiety w środowisku wirtualnym za pomocąpip
. pyenv
służy do izolowania Wersje Pythona. Na przykład możesz przetestować swój kod pod kątem Pythona 2.6, 2.7, 3.3, 3.4 i 3.5, więc będziesz potrzebował sposobu na przełączanie się między nimi. Po aktywacji prefiks zmiennej środowiskowejPATH
z~/.pyenv/shims
, gdzie znajdują się specjalne pliki pasujące do poleceń Pythona(python
,pip
). Nie są to kopie poleceń wysłanych przez Pythona; są to specjalne skrypty, które decydują w locie, która wersja Pythona ma zostać uruchomiona na podstawie zmiennej środowiskowejPYENV_VERSION
, pliku.python-version
lub~/.pyenv/version
plik.pyenv
ułatwia również proces pobierania i instalowania wielu wersji Pythona za pomocą poleceniapyenv install
.pyenv-virtualenv
jest pluginem dlapyenv
tego samego autora copyenv
, aby umożliwić wygodne korzystanie zpyenv
ivirtualenv
w tym samym czasie. Jeśli jednak używasz Pythona 3.3 lub nowszego,pyenv-virtualenv
spróbuje uruchomićpython -m venv
, jeśli jest dostępny, zamiastvirtualenv
. Możesz używaćvirtualenv
ipyenv
razem bezpyenv-virtualenv
, Jeśli nie chcesz funkcje wygody.virtualenvwrapper
jest zestawem rozszerzeń dovirtualenv
(zobacz docs ). Daje polecenia takie jakmkvirtualenv
,lssitepackages
, a szczególnie {[33] } do przełączania między różnymi katalogamivirtualenv
. To narzędzie jest szczególnie przydatne, jeśli chcesz mieć wiele katalogówvirtualenv
.pyenv-virtualenvwrapper
jest pluginem dlapyenv
tego samego autora copyenv
, aby wygodnie zintegrowaćvirtualenvwrapper
Zpyenv
.-
pipenv
, najnowszym projektem na tej liście jest Kenneth Reitz (autor {42]}). Ma na celu połączeniePipfile
,pip
ivirtualenv
do jednego polecenia w wierszu poleceń. Katalogvirtualenv
zazwyczaj jest umieszczany w~/.local/share/virtualenvs/XXX
, aXXX
jest Hashem ścieżki katalogu projektu. Różni się to odvirtualenv
, gdzie katalog zazwyczaj znajduje się w bieżącym katalogu roboczym.Podręcznik pakowania Pythona poleca
pipenv
przy rozwijaniu Aplikacji Pythona (w przeciwieństwie do bibliotek). Nie wydaje się być wszelkie plany wsparciavenv
zamiastvirtualenv
(#15). Myląco, jego opcja wiersza poleceń--venv
odnosi się dovirtualenv
katalog, nievenv
, a podobnie środowisko zmiennaPIPENV_VENV_IN_PROJECT
wpływa na położenievirtualenv
katalog, nievenv
katalog (#1919).
Biblioteka Standardowa:
pyvenv
czy skrypt jest wysyłany z Pythonem 3, ale przestarzały w Pythonie 3.6 , ponieważ miał problemy(nie wspominając o mylącej nazwie). W Pythonie 3.6 + dokładnym odpowiednikiem jestpython3 -m venv
.venv
jest to pakiet dostarczany z Pythonem 3, który można uruchomić używającpython3 -m venv
(chociaż z jakiegoś powodu niektóre dystrybucje oddzielają go w oddzielny pakiet distro, taki jak {[63] } na Ubuntu / Debianie). Służy do podobnego celu jakvirtualenv
i działa w bardzo podobny sposób, ale nie musi Kopiuj pliki binarne Pythona (z wyjątkiem Windows). Użyj tego, jeśli nie musisz obsługiwać Pythona 2. W momencie pisania tego tekstu społeczność Pythona wydaje się być zadowolona zvirtualenv
i nie słyszałem zbyt wiele ovenv
.
pipenv
integruje pip
, virtualenv
a nawet pyenv
w razie potrzeby. Jedynymi narzędziami, które są prawdziwą alternatywą dla siebie tutaj są venv
i virtualenv
.
Rekomendacja dla początkujących:
To to moja osobista rekomendacja dla początkujących: zacznij od nauki virtualenv
i pip
, narzędzi, które działają zarówno z Pythonem 2 i 3, jak i w różnych sytuacjach, i odbierz Inne narzędzia, gdy zaczniesz ich potrzebować.
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
2018-04-12 08:48:49
Uniknąłbym używania virtualenv
po Python3.3+ i zamiast tego korzystał ze standardowej biblioteki venv
. Aby utworzyć nowe środowisko wirtualne należy wpisać:
$ python3 -m venv <MYVENV>
virtualenv
próbuje skopiować plik binarny Pythona do katalogu bin środowiska wirtualnego. Jednak nie aktualizuje łączy plików biblioteki osadzonych w tym pliku binarnym, więc jeśli zbudujesz Pythona ze źródła do katalogu nie-systemowego z względnymi nazwami ścieżek, binarny Python zostanie przerwany. Ponieważ tak się robi kopię distributable Python, jest to duża wada. BTW aby sprawdzić linki do plików osadzonych bibliotek w systemie OS X, użyj otool
. Na przykład z poziomu środowiska wirtualnego wpisz:
$ otool -L bin/python
python:
@executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
Dlatego unikałbym virtualenvwrapper
i pipenv
. pyvenv
jest przestarzały. pyenv
wydaje się być często używany tam, gdzie virtualenv
jest używany, ale trzymałbym się od niego z daleka, ponieważ myślę, że venv
również robi to, do czego pyenv
jest zbudowany.
venv
tworzy wirtualne środowiska w powłoce, które są świeże i sandboxed , z bibliotekami instalowanymi przez użytkownika , i jest multi-python safe . Fresh ponieważ środowiska wirtualne zaczynają się tylko od standardowych bibliotek wysyłanych z Pythonem, musisz zainstalować wszystkie inne biblioteki od nowa z pip install
, gdy środowisko wirtualne jest aktywne. Sandboxed ponieważ żadna z tych nowych instalacji bibliotek nie jest widoczna poza środowiskiem wirtualnym, więc możesz usunąć całe środowisko i zacząć od nowa bez martwiąc się o wpływ na podstawową instalację Pythona. Biblioteki instalowalne przez użytkownika ponieważ docelowy folder środowiska wirtualnego jest tworzony bez sudo
w jakimś katalogu, który już posiadasz, więc nie będziesz potrzebował sudo
uprawnień do instalowania w nim bibliotek. W końcu jest to multi-python safe , ponieważ kiedy środowiska wirtualne aktywują się, powłoka widzi tylko wersję Pythona (3.4, 3.5 itd.), który został użyty do zbudowania tego wirtualnego środowiska.
pyenv
jest podobny do venv
dzięki temu można zarządzać wieloma środowiskami Pythona. Jednak z pyenv
nie można wygodnie cofnąć instalacji biblioteki do jakiegoś stanu początkowego i prawdopodobnie będziesz potrzebować admin
uprawnień w pewnym momencie, aby zaktualizować biblioteki. Więc myślę, że najlepiej jest również użyć venv
.
W ciągu ostatnich kilku lat znalazłem wiele problemów w systemach budowania (Pakiety emacs, samodzielne budownicze aplikacji Pythona,instalatory...), które ostatecznie sprowadzają się do problemów z virtualenv
. Myślę, że python będzie lepsza Platforma, gdy wyeliminujemy tę dodatkową opcję i użyjemy tylko venv
.
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
2018-02-21 18:25:50