Niedawno nauczyłem się, jak używać virtualenv i virtualenvwrapper w moim przepływie pracy, ale widziałem o pyenv wspomnianym w kilku przewodnikach, ale nie mogę zrozumieć, czym jest pyenv i czym różni się / jest podobny do virtualenv. Czy pyenv jest lepszym / nowszym zamiennikiem virtualenv czy darmowym narzędziem? Jeśli to drugie, to co robi inaczej i jak te dwa elementy (i virtualenvwrapper, jeśli dotyczy) współpracują ze sobą?
python
virtualenv
virtualenvwrapper
pyenv
prawdziwość
źródło
źródło
pyenv
zmylićpyvenv
Odpowiedzi:
Pyenv i virtualenv to bardzo różne narzędzia, które działają na różne sposoby, aby robić różne rzeczy:
Pyenv jest rozszerzeniem bash - nie będzie działać w systemie Windows - które przechwytuje wywołania do języka Python, pip itp., Aby skierować je do jednego z kilku łańcuchów narzędzi systemu Python. Więc zawsze masz dostępne wszystkie biblioteki, które zainstalowałeś w wybranej wersji Pythona - jako takie jest dobre dla użytkowników, którzy muszą przełączać się między różnymi wersjami Pythona.
VirtualEnv jest czystym Pythonem , więc działa wszędzie, tworzy kopię, opcjonalnie konkretną wersję, python i pip lokalną dla aktywowanego środowiska, które może zawierać linki do bieżącego łańcucha narzędzi systemu, jeśli nie, możesz zainstaluj tylko znany podzbiór bibliotek w tym środowisku. W związku z tym prawie na pewno jest znacznie lepszy do testowania i wdrażania, ponieważ dokładnie wiesz , które biblioteki, w jakich wersjach są używane, a globalna zmiana nie wpłynie na twój moduł.
venv python> 3.3
Zauważ, że od Pythona 3.3 i nowszych istnieje wbudowana implementacja VirtualEnv o nazwie venv (z, w niektórych instalacjach opakowaniem o nazwie pyvenv - ten wrapper jest przestarzały w Pythonie 3.6 ), który prawdopodobnie powinien być używany w pierwszej kolejności. Aby uniknąć możliwych problemów z opakowaniem, często dobrym pomysłem jest użycie go bezpośrednio przy użyciu
/path/to/python3 -m venv desired/env/path
lub możesz użyć doskonałegopy
selektora Pythona w oknach zpy -3 -m venv desired/env/path
. Utworzy katalog określony wdesired/env/path
pliku configure i odpowiednio go zapełni. Ogólnie jest to bardzo podobne do używania VirtualEnv.Dodatkowe narzędzia
Jest kilka narzędzi, o których warto wspomnieć i rozważyć, ponieważ mogą one pomóc przy użyciu jednego lub więcej z powyższych:
źródło
venv
teraz w standardowej bibliotece?virtualenv
pozwala na stworzenie własnej instalacji Pythona np. w podkatalogu Twojego projektu. W ten sposób każdy z twoich projektów może mieć swój własnypython
(lub nawet kilka) pod odpowiednim virtualenv. Dla niektórych / wszystkich virtualenvów jest w porządku, aby mieć nawet tę samą wersjępython
(np. 2.7.16) bez konfliktów - żyją osobno i nie znają się. Jeśli chcesz użyć któregokolwiek z tychpython
plików, musisz toactivate
zrobić (uruchamiając skrypt, który tymczasowo zmodyfikuje twój,PATH
aby upewnić się, żebin/
katalog virtualenv jest pierwszy). Od tego momentu wywołaniepython
(lubpip
itp.) Będzie wywoływać wersję tego virtualenv, dopókideactivate
jej nie wyślesz (co przywracaPATH
).pyenv
działa na szerszą skalę niżvirtualenv
- przechowuje rejestr instalacji Pythona (i może być używany do instalowania nowych) i pozwala skonfigurować, która wersja Pythona ma zostać uruchomiona, gdy użyjeszpython
polecenia. Brzmi podobnie, ale praktyczne zastosowanie jest nieco inne. Działa poprzez dołączenie swojegopython
skryptu podkładki do twojegoPATH
(na stałe), a następnie podjęcie decyzji, który „prawdziwy” mapython
zostać wywołany. Możesz nawet skonfigurować pyenv, aby wywoływał jeden z twoich pythonów virtualenv (za pomocąpyenv-virtualenv
wtyczki). Wersje Pythona, które instalujesz za pomocą,pyenv
przechodzą do jego$(pyenv root)/versions/
katalogu (domyślnie katalog główny pyenv to ~ / .pyenv), więc są bardziej „globalne” niż virtualenv. Zwykle nie można powielać zainstalowanych wersji Pythonapyenv
, przynajmniej nie jest to głównym pomysłem.Aby utworzyć virtualenv z określoną wersją Pythona, musisz mieć tę wersję gdzieś w swoim systemie (niezależnie od tego, czy jest włączona,
PATH
czy nie) i zasadniczo sklonować ją do nowo utworzonego virtualenv. Oczywiście jednym ze sposobów uzyskania określonej wersji jest zainstalowanie jej za pośrednictwempyenv
. Gdy to zrobisz, poszczególne virtualenvy mogą się dowolnie różnić, instalując w nich różne moduły (lub ich wersje).W skrócie:
virtualenv
pozwala na tworzenie lokalnych, niezależnych instalacji Pythona poprzez klonowanie z już istniejącychpyenv
pozwala na jednoczesną instalację różnych wersji Pythona (w całym systemie lub tylko dla użytkownika lokalnego), a następnie wybranie, który z wielu Pythonów ma być uruchamiany w dowolnym momencie (w tym te utworzone przez virtualenv lub Anaconda)źródło