Jaka jest różnica między pyenv, virtualenv, anaconda?

142

Jestem programistą ruby ​​próbującym nauczyć się Pythona. Jestem ładną rodziną z pyenv, ponieważ jest to jak kopiowanie i wklejanie z rbenv. Pyenv pomaga pozwolić na posiadanie więcej niż jednej wersji Pythona w systemie, a także izolować Pythona bez dotykania wrażliwej części systemu.

Przypuszczam, że każda instalacja Pythona zawiera pakiet pip. Nadal nie rozumiem, że istnieje wiele dobrych bibliotek Pythona, które sugerują użycie tego virtualenv i anaconda. Mogę nawet znaleźć wtyczkę virtualenv do pyenv.

Teraz jestem mylony z celem tych dwóch pyenv i virtualenv. gorzej w pyenv jest wtyczka virtualenv.

moje pytania to:

  • Jaka jest różnica między pyenv a virtualenv?
  • Czy jest jakaś różnica w używaniu polecenia pip zarówno w pyenv, jak i virtualenv?
  • co robi ten pyenv virutalenv?

Twoje wyjaśnienie z przykładem będzie bardzo mile widziane.

channa ly
źródło

Odpowiedzi:

153

Edycja: Warto piptu również wspomnieć , condaa pippodobieństwa i różnice są istotne dla tego tematu .

pip: Python Package Manager.

  • Możesz myśleć o pipPythonie jako odpowiedniku gempolecenia ruby
  • pip nie jest domyślnie dołączony do języka Python.
  • Możesz zainstalować Pythona za pomocą homebrew , który zainstaluje pip automatycznie:brew install python
  • Ostateczna wersja OSX nie zawierała domyślnie pip. Aby dodać pip do wersji Pythona w systemie Mac, możeszsudo easy_install pip
  • Możesz znaleźć i opublikować pakiety Pythona za pomocą PyPI: The Python Package Index
  • Plik Requirements.txt jest porównywalny z plikiem ruby gemfile
  • Aby utworzyć plik tekstowy wymagań, pip freeze > requirements.txt
  • Zwróć uwagę, że w tym momencie w naszym systemie jest zainstalowany język Python i utworzyliśmy plik Requirements.txt, który przedstawia wszystkie pakiety Pythona, które zostały zainstalowane w systemie.

pyenv: Menedżer wersji Pythona

  • Z dokumentacji : pyenv pozwala łatwo przełączać się między różnymi wersjami Pythona. Jest prosty, dyskretny i jest zgodny z tradycją UNIX-ową dotyczącą narzędzi jednofunkcyjnych, które dobrze wykonują jedną rzecz. Ten projekt został rozwidlony z rbenv i ruby-build i zmodyfikowany pod kątem języka Python.
  • Wiele osób waha się przed użyciem Pythona3 .
  • Jeśli potrzebujesz używać różnych wersji Pythona, pyenvpozwala to łatwo zarządzać.

virtualenv: Menedżer środowiska Python.

  • Z dokumentacji : Podstawowym problemem, do którego się odnosi, są zależności i wersje, a pośrednio uprawnienia. Wyobraź sobie, że masz aplikację, która wymaga wersji 1 LibFoo, ale inna aplikacja wymaga wersji 2. Jak możesz używać obu tych aplikacji? Jeśli zainstalujesz wszystko w /usr/lib/python2.7/site-packages (lub jakiejkolwiek innej standardowej lokalizacji twojej platformy), łatwo jest skończyć w sytuacji, w której niezamierzenie zaktualizujesz aplikację, której nie należy aktualizować.
  • Aby utworzyć virtualenv, po prostu wywołaj virtualenv ENV, gdzie ENVjest katalog do umieszczenia nowego środowiska wirtualnego.
  • Aby zainicjować virtualenv, musisz source ENV/bin/activate. Aby przestać korzystać, po prostu zadzwoń deactivate.
  • Po aktywowaniu virtualenvmożna zainstalować wszystkie wymagania pakietu obszaru roboczego, uruchamiając plik pip install -rprojektu requirements.txt.

Anaconda: menedżer pakietów + menedżer środowiska + dodatkowe biblioteki naukowe.

  • Z dokumentacji : Anaconda 4.2.0 zawiera łatwą instalację Pythona (2.7.12, 3.4.5 i / lub 3.5.2) oraz aktualizacje ponad 100 wstępnie zbudowanych i przetestowanych pakietów naukowych i analitycznych Pythona, w tym NumPy, Pandas , SciPy, Matplotlib i IPython, z ponad 620 dodatkowymi pakietami dostępnymi za pośrednictwem prostegoconda install <packagename>
  • Jako twórca stron internetowych nie korzystałem z Anacondy. To ~ 3 GB łącznie ze wszystkimi pakietami.
  • Istnieje odchudzona minicondawersja, która wydaje się być prostszą opcją niż użycie pip+ virtualenv, chociaż nie mam doświadczenia w używaniu go osobiście.
  • Chociaż condapozwala na instalację pakietów, pakiety te są oddzielne od pakietów PyPI, więc nadal może być konieczne dodatkowe użycie pip, w zależności od typów pakietów, które chcesz zainstalować.

Zobacz też:

Wade Williams
źródło
3
Prawdopodobnie
przydałoby się
9
Czy można to zaktualizować, aby dołączyć do pipenv, ponieważ obecnie wydaje się, że jest to oficjalnie zalecane narzędzie do pakowania w Pythonie z Python.org?
Wavesailor
1
Jaki jest problem z instalacją bibliotek o pojemności zaledwie 3 GB? Nie chciałbyś wdrożyć wszystkich tych bibliotek, ale tylko dlatego, że masz zainstalowane biblioteki o pojemności 3 GB, nie oznacza, że ​​musisz wdrożyć je wszystkie. W dzisiejszych czasach to niewielka ilość miejsca na dysku twardym. Obecnie używam instalacji anaconda i zarządzam swoimi środowiskami za pomocą venv, ale zastanawiałem się, czy użyć conda również dla moich wirtualnych środowisk (nie sądzę, żebym to zrobił - venv wydaje mi się płynniejszym przepływem pracy).
David
@David Trochę się spóźniłem, ale czy możesz rozwinąć venv wydaje mi się płynniejszym przepływem pracy ?
AMC
1

Prosta analogia:

  • pyenv ~ rbenv
  • pip ~ bundler
  • wirtualny env ~ gemset w rvm. Może to być zarządzane bezpośrednio przez bundler, bez gemset.

Ponieważ używam python3, wolę wbudowane środowisko wirtualne python3 o nazwie venv . venv jest prosty i łatwy w użyciu. Zalecałbym przeczytanie jego oficjalnych dokumentów. Dokument jest krótki i zwięzły.

W Ruby tak naprawdę nie potrzebujemy środowiska wirtualnego, ponieważ zajmuje się nim bundler. Zarówno wirtualne środowisko, jak i pakiet są świetne, ale mają inną koncepcję, ale próbują rozwiązać ten sam problem.

channa ly
źródło