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?

Author: Flimm, 2017-01-10

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 katalogiem bin (np: env/bin/). Dokładna kopia pliku binarnego python lub python3 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 środowiskowej PATH 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 środowiskowej PYENV_VERSION, pliku .python-version lub ~/.pyenv/version plik. pyenv ułatwia również proces pobierania i instalowania wielu wersji Pythona za pomocą polecenia pyenv install.

  • pyenv-virtualenv jest pluginem dla pyenv tego samego autora co pyenv, aby umożliwić wygodne korzystanie z pyenv i virtualenv 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, zamiast virtualenv. Możesz używać virtualenv i pyenv razem bez pyenv-virtualenv, Jeśli nie chcesz funkcje wygody.

  • virtualenvwrapper jest zestawem rozszerzeń do virtualenv (zobacz docs ). Daje polecenia takie jak mkvirtualenv, lssitepackages, a szczególnie {[33] } do przełączania między różnymi katalogami virtualenv. To narzędzie jest szczególnie przydatne, jeśli chcesz mieć wiele katalogów virtualenv.

  • pyenv-virtualenvwrapper jest pluginem dla pyenv tego samego autora co pyenv, aby wygodnie zintegrować virtualenvwrapper Z pyenv.

  • pipenv, najnowszym projektem na tej liście jest Kenneth Reitz (autor {42]}). Ma na celu połączenie Pipfile, pip i virtualenv do jednego polecenia w wierszu poleceń. Katalog virtualenv zazwyczaj jest umieszczany w ~/.local/share/virtualenvs/XXX, a XXX jest Hashem ścieżki katalogu projektu. Różni się to od virtualenv, 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 wsparcia venv zamiast virtualenv (#15). Myląco, jego opcja wiersza poleceń --venv odnosi się do virtualenv katalog, nie venv, a podobnie środowisko zmienna PIPENV_VENV_IN_PROJECT wpływa na położenie virtualenv katalog, nie venv 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 jest python3 -m venv.

  • venv jest to pakiet dostarczany z Pythonem 3, który można uruchomić używając python3 -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 jak virtualenv 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 z virtualenv i nie słyszałem zbyt wiele o venv.

Większość tych narzędzi się uzupełnia. Na przykład 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ć.

 572
Author: Flimm,
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.

 80
Author: Riaz Rizvi,
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