Python 3.3 zawiera w swojej standardowej bibliotece nowy pakiet venv
. Co robi i czym różni się od wszystkich innych pakietów, które wydają się pasować do wyrażenia regularnego (py)?(v|virtual|pip)?env
?
1021
Python 3.3 zawiera w swojej standardowej bibliotece nowy pakiet venv
. Co robi i czym różni się od wszystkich innych pakietów, które wydają się pasować do wyrażenia regularnego (py)?(v|virtual|pip)?env
?
virtualenv
ipyenv
nie wykonują tej samej funkcji i nie stanowią dla siebie alternatywy. Zobacz moją odpowiedź.Odpowiedzi:
Pakiety PyPI spoza standardowej biblioteki:
virtualenv
jest bardzo popularnym narzędziem, które tworzy izolowane środowiska Python dla bibliotek Python. Jeśli nie znasz tego narzędzia, zdecydowanie polecam jego naukę, ponieważ jest to bardzo przydatne narzędzie, a ja dokonam porównań z pozostałą częścią tej odpowiedzi.Działa, instalując kilka plików w katalogu (np .
env/
:), a następnie modyfikującPATH
zmienną środowiskową, aby poprzedzała ją niestandardowymbin
katalogiem (npenv/bin/
.:). Dokładna kopia pliku binarnegopython
lubpython3
jest umieszczana w tym katalogu, ale Python jest zaprogramowany tak, aby najpierw szukał bibliotek względem ś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żesz zainstalować pakiety w środowisku wirtualnym za pomocąpip
.pyenv
służy do izolowania wersji Pythona. Na przykład możesz przetestować swój kod pod kątem Pythona 2.7, 3.6, 3.7 i 3.8, więc będziesz potrzebował sposobu na przełączanie się między nimi. Po aktywacji poprzedzaPATH
zmienną środowiskową słowem~/.pyenv/shims
, w którym znajdują się specjalne pliki pasujące do poleceń Pythona (python
,pip
). To nie są kopie poleceń dostarczanych przez Python; są to specjalne skrypty, które na bieżąco decydują, którą wersję Pythona uruchomić w oparciu oPYENV_VERSION
zmienną środowiskową,.python-version
plik lub~/.pyenv/version
plik.pyenv
ułatwia także pobieranie i instalowanie wielu wersji Pythona za pomocą poleceniapyenv install
.pyenv-virtualenv
jest wtyczką dlapyenv
tego samego autora, copyenv
, aby umożliwić ci korzystaniepyenv
ivirtualenv
jednocześnie wygodne. Jeśli jednak używasz języka Python 3.3 lub nowszego,pyenv-virtualenv
spróbujesz uruchomić,python -m venv
jeśli jest dostępny, zamiastvirtualenv
. Możesz używaćvirtualenv
ipyenv
razem bezpyenv-virtualenv
, jeśli nie chcesz funkcji wygody.virtualenvwrapper
to zestaw rozszerzeńvirtualenv
(patrz dokumenty ). Daje ci polecenia takie jakmkvirtualenv
,lssitepackages
a zwłaszczaworkon
do przełączania między różnymivirtualenv
katalogami. To narzędzie jest szczególnie przydatne, jeśli chcesz mieć wielevirtualenv
katalogów.pyenv-virtualenvwrapper
Jest to plugin dopyenv
tego samego autora, jakpyenv
i wygodnie zintegrowaćvirtualenvwrapper
siępyenv
.pipenv
ma na celu łączyćPipfile
,pip
avirtualenv
do jednego polecenia w linii poleceń.virtualenv
Katalog zwykle zostaje umieszczone w~/.local/share/virtualenvs/XXX
, zXXX
bycia hash ścieżce katalogu projektu. Różni się to od tegovirtualenv
, gdzie katalog zazwyczaj znajduje się w bieżącym katalogu roboczym.pipenv
jest przeznaczony do użycia podczas tworzenia aplikacji w języku Python (w przeciwieństwie do bibliotek). Istnieją alternatywypipenv
, takie jakpoetry
, których nie wymienię tutaj, ponieważ to pytanie dotyczy tylko pakietów o podobnej nazwie.Biblioteka standardowa:
pyvenv
to skrypt dostarczany 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ładny odpowiednik topython3 -m venv
.venv
to pakiet dostarczany z Pythonem 3, który można uruchomićpython3 -m venv
(chociaż z jakiegoś powodu niektóre dystrybucje dzielą go na osobny pakiet dystrybucyjny, taki jakpython3-venv
na Ubuntu / Debian). Służy temu samemu celowivirtualenv
, ale ma tylko podzbiór jego funkcji ( patrz porównanie tutaj ).virtualenv
nadal jest bardziej popularny niżvenv
, zwłaszcza, że pierwszy obsługuje zarówno Python 2, jak i 3.Zalecenie dla początkujących:
To jest moja osobista rekomendacja dla początkujących: zacznij od nauki
virtualenv
ipip
narzędzi, które działają zarówno z Pythonem 2, jak i 3 oraz w różnych sytuacjach, i wybierz inne narzędzia, gdy zaczniesz ich potrzebować.źródło
venv
rzeczywiście rozwiązałeś ten problem?venv
możesz łatwiej uaktualnić do nowej wersji Python.Po prostu unikałbym używania programu
virtualenv
po Python3.3 + i zamiast tego używałbym standardowej biblioteki dostarczonejvenv
. Aby utworzyć nowe środowisko wirtualne, wpisz:virtualenv
próbuje skopiować plik binarny Python do katalogu bin środowiska wirtualnego. Jednak nie aktualizuje łączy plików bibliotek osadzonych w tym pliku binarnym, więc jeśli zbudujesz Pythona ze źródła w katalogu niesystemowym o względnych nazwach ścieżek, plik binarny Pythona ulegnie awarii. Ponieważ w ten sposób tworzysz kopię Pythona do dystrybucji, jest to duża wada. BTW, aby sprawdzić osadzone łącza plików bibliotek w OS X, użyjotool
. Na przykład w środowisku wirtualnym wpisz:W związku z tym unikałbym
virtualenvwrapper
ipipenv
.pyvenv
jest przestarzałe.pyenv
wydaje się być używany często tam, gdzievirtualenv
jest używany, ale trzymałbym się z dala od niego również, ponieważ myślę, żevenv
robi to, copyenv
jest zbudowane.venv
tworzy środowiska wirtualne w powłoce, które są świeże i w piaskownicy , z bibliotekami instalowanymi przez użytkownika i jest bezpieczne dla wielu Pythona . Świeżo, ponieważ środowiska wirtualne zaczynają się tylko od standardowych bibliotek dostarczanych z Pythonem, musisz zainstalować wszystkie inne biblioteki od nowa,pip install
gdy środowisko wirtualne jest aktywne. Piaskownica, ponieważ żadna z tych nowych instalacji bibliotek nie jest widoczna poza środowiskiem wirtualnym, dzięki czemu można usunąć całe środowisko i rozpocząć od nowa bez obawy o wpływ na podstawową instalację Pythona. Biblioteki instalowane przez użytkownika, ponieważ folder docelowy środowiska wirtualnego jest tworzony bezsudo
w jakimś katalogu, który już posiadasz, więc nie będziesz potrzebowaćsudo
uprawnień do instalowania w nim bibliotek. Wreszcie jest bezpieczny dla wielu Pythona , ponieważ po aktywacji środowisk wirtualnych powłoka widzi tylko wersję Pythona (3.4, 3.5 itd.), Która została użyta do zbudowania tego środowiska wirtualnego.pyenv
jest podobny dovenv
tego, że pozwala zarządzać wieloma środowiskami Pythona. Jednakpyenv
nie możesz wygodnie wycofać instalacji bibliotek do stanu początkowego i prawdopodobnie będziesz potrzebowaćadmin
uprawnień do aktualizacji bibliotek. Myślę więc, że najlepiej też użyćvenv
.W ciągu ostatnich kilku lat znalazłem wiele problemów w systemach kompilacji (pakiety emacs, samodzielne konstruktory aplikacji python, instalatory ...), które ostatecznie sprowadzają się do problemów
virtualenv
. Myślę, że Python będzie lepszą platformą, kiedy wyeliminujemy tę dodatkową opcję i użyjemy tylkovenv
.źródło
add2virtualenv
poprawia twójPYTHONPATH
, dodając niestandardowy_virtualenv_path_extensions.pth
plik wsite-packages
. Alternatywnie możesz zaktualizowaćPYTHONPATH
zmienną środowiskową wbin/activate
pliku, który wywołujesz przy każdej aktywacji środowiska wirtualnego. Lub możesz dodać dowiązania symboliczne,site-packages
aby wskazać dodatkowe katalogi. Obie te alternatywy są bardziej przejrzyste w stosunku do tradycyjnych narzędzi wiersza poleceń, które programiści często używają do rozwiązywania problemów. Zastosowanie zwyczaju.pth
o nieudokumentowanej nazwie sprawia, że IMO wydaje się bardziej magiczne.PYTHONPATH
eliminuje potrzebęadd2virtualenv
. Jeśli chodzi o brak pomocy w SO od twojego pierwszego komentarza, moja jedyna sugestia to głosowanie na odpowiedzi, jeśli naprawią twój problem, aby zmotywować ludzi do rozwiązywania problemów podczas pisania? Pół godziny dochodzenia + napisanie w zamian za kliknięcie myszką? Brzmi jak dobry handel ...pyvenv
jest przestarzałe, a niepyenv
. Tak łatwo jest pomylić nazwy tych narzędzi.Poszedłem do
pipenv
dziury królika ( to jest naprawdę głęboka i ciemna dziura ... ), a ponieważ ostatnia odpowiedź jest ponad 2 lata temu , uznałem, że warto zaktualizować dyskusję o najnowsze osiągnięcia dotyczące tematu wirtualnych kopert I znalazłem.ZRZECZENIE SIĘ:
Ta odpowiedź NIE dotyczy kontynuowania szalejącej debaty na temat zalet pipenv kontra venv jako rozwiązań kopertowych - nie popieram żadnego z nich . Chodzi o PyPA popierając sprzecznych norm i jak przyszły rozwój virtualenv obietnic negować dokonywania albo / albo wybór między nimi w ogóle. Skoncentrowałem się na tych dwóch narzędziach właśnie dlatego, że są namaszczone przez PyPA .
venv
Jak zauważa OP, venv jest narzędziem do wirtualizacji środowisk. NIE rozwiązanie strony trzeciej, ale natywne narzędzie. PyPA popiera venv do tworzenia WIRTUALNYCH KOPERT : „ Zmieniono w wersji 3.5: Teraz zaleca się użycie venv do tworzenia środowisk wirtualnych ”.
pipenv
pipenv - podobnie jak venv - może być wykorzystywany do tworzenia wirtualnych kopert, ale dodatkowo umożliwia zarządzanie pakietami i sprawdzanie podatności . Zamiast używać
requirements.txt
,pipenv
zapewnia zarządzanie pakietami za pomocą Pipfile . Ponieważ PyPA popiera pipenv do ZARZĄDZANIA PAKIETAMI , wydaje się, że sugerujepipfile
to zastąpienierequirements.txt
.JEDNAK : pipenv używa virtualenv jako narzędzia do tworzenia wirtualnych kopert, a NIE venv, który jest popierany przez PyPA jako narzędzie do tworzenia wirtualnych kopert.
Sprzeczne normy:
Więc jeśli ustalenie rozwiązania wirtualnej koperty nie było wystarczająco trudne, mamy teraz PyPA zatwierdzające dwa różne narzędzia, które używają różnych rozwiązań wirtualnej koperty. Szalejącą debatę Github na temat Venv vs. Virtualenv, która podkreśla ten konflikt, można znaleźć tutaj .
Rozwiązanie konfliktu:
Debata na Github, o której mowa w powyższym linku, ukierunkowała rozwój virtualenv w kierunku dostosowania venv w przyszłych wydaniach :
Wniosek:
Wygląda więc na to, że w przyszłości nastąpi pewna zbieżność między dwoma rywalizującymi rozwiązaniami wirtualnej koperty, ale na razie pipenv - z którego korzysta
virtualenv
- różni się znacznievenv
.Biorąc pod uwagę problemy, które rozwiązuje pipenv, oraz fakt, że PyPA udzielił błogosławieństwa, wydaje się , że ma przed sobą świetlaną przyszłość. A jeśli virtualenv dostarcza na proponowanych celów rozwojowych, wybierając wirtualny rozwiązanie koperty nie powinny już być przypadek albo pipenv LUB venv .
źródło
Aktualizacja z kwietnia 2020 r
Szukałem tego samego, kiedy natknąłem się na ten post . Myślę, że to pytanie o to, jakiego narzędzia użyć, jest dość mylące i trudne dla nowych użytkowników Pythona, takich jak ja. To jest bezpośrednio ze strony internetowej PyPA dotyczącej pipenv:
źródło
pipenv
zespół wydał 2 wersje do PyPI:2020.5.28
a ostatnio2020.6.2
: pypi.org/project/pipenv/#history