Quelle est la différence entre pyenv, virtualenv, anaconda?

142

Je suis un programmeur Ruby essayant d'apprendre le python. Je suis une jolie famille avec pyenv car c'est comme un copier-coller de rbenv. Pyenv permet d'avoir plus d'une version de python dans un système et aussi d'isoler le python sans toucher la partie sensible du système.

Je suppose que chaque installation python est livrée avec le package pip. Ce que je ne comprends toujours pas, c'est qu'il existe de nombreuses bonnes bibliothèques python qui suggèrent d'utiliser ce virtualenv et anaconda. Je peux même trouver le plugin virtualenv pour pyenv.

Maintenant, je suis confus avec le but de ces deux pyenv et virtualenv. pire à l'intérieur de pyenv il y a un plugin virtualenv.

mes questions sont:

  • quelle est la différence entre pyenv et virtualenv?
  • Y a-t-il une différence dans l'utilisation de la commande pip à la fois dans pyenv et virtualenv?
  • que fait ce pyenv virutalenv?

votre explication avec exemple sera très appréciée.

channa ly
la source

Réponses:

154

Edit: Il vaut la peine de mentionner pipici aussi, comme condaet pipprésentent des similitudes et des différences qui sont pertinentes à ce sujet .

pip: le gestionnaire de packages Python.

  • Vous pourriez penser pipà l'équivalent python de la gemcommande ruby
  • pip n'est pas inclus avec python par défaut.
  • Vous pouvez installer Python en utilisant homebrew , qui installera pip automatiquement:brew install python
  • La version finale d'OSX n'incluait pas pip par défaut. Pour ajouter pip à la version de python de votre système Mac, vous pouvezsudo easy_install pip
  • Vous pouvez rechercher et publier des packages python à l'aide de PyPI: l'index des packages Python
  • Le fichier requirements.txt est comparable au ruby gemfile
  • Pour créer un fichier texte d'exigences, pip freeze > requirements.txt
  • Notez qu'à ce stade, python est installé sur notre système et nous avons créé un fichier requirements.txt qui décrit tous les packages python qui ont été installés sur votre système.

pyenv: Gestionnaire de versions Python

  • À partir de la documentation : pyenv vous permet de basculer facilement entre plusieurs versions de Python. C'est simple, discret et suit la tradition UNIX des outils à usage unique qui font bien une chose. Ce projet a été dérivé de rbenv et ruby-build, et modifié pour Python.
  • Beaucoup de gens hésitent à utiliser python3 .
  • Si vous avez besoin d'utiliser différentes versions de python, pyenvvous permet de gérer cela facilement.

virtualenv: Gestionnaire d'environnement Python.

  • À partir de la documentation : Le problème de base traité est l'un des dépendances et des versions, et indirectement des autorisations. Imaginez que vous ayez une application qui nécessite la version 1 de LibFoo, mais qu'une autre application nécessite la version 2. Comment pouvez-vous utiliser ces deux applications? Si vous installez tout dans /usr/lib/python2.7/site-packages (ou quel que soit l'emplacement standard de votre plate-forme), il est facile de se retrouver dans une situation où vous mettez à niveau involontairement une application qui ne devrait pas être mise à niveau.
  • Pour créer un virtualenv, appelez simplement virtualenv ENV, où ENVest un répertoire pour placer le nouvel environnement virtuel.
  • Pour initialiser le virtualenv, vous devez source ENV/bin/activate. Pour arrêter d'utiliser, appelez simplement deactivate.
  • Une fois que vous avez activé le virtualenv, vous pouvez installer toutes les exigences de package d'un espace de travail en exécutant pip install -rsur le requirements.txtfichier du projet .

Anaconda: Package Manager + Environment Manager + Bibliothèques scientifiques supplémentaires.

  • Extrait de la documentation : Anaconda 4.2.0 comprend une installation facile de Python (2.7.12, 3.4.5 et / ou 3.5.2) et des mises à jour de plus de 100 packages Python scientifiques et analytiques pré-construits et testés qui incluent NumPy, Pandas , SciPy, Matplotlib et IPython, avec plus de 620 packages supplémentaires disponibles via un simpleconda install <packagename>
  • En tant que développeur Web, je n'ai pas utilisé Anaconda. C'est ~ 3 Go avec tous les packages.
  • Il existe une minicondaversion allégée , ce qui semble être une option plus simple que d'utiliser pip+ virtualenv, bien que je n'ai pas d'expérience de l'utiliser personnellement.
  • Bien que condavous puissiez installer des packages, ces packages sont distincts des packages PyPI, vous devrez donc peut-être utiliser pip en plus selon les types de packages que vous devez installer.

Voir également:

Wade Williams
la source
3
Cela pourrait probablement utiliser une actualisation maintenant, cf stackoverflow.com/a/49084152/14420
matt wilkie
9
Cela pourrait-il être mis à jour pour être inclus dans pipenv car il semble actuellement être l'outil de packaging Python officiellement recommandé de Python.org?
Wavesailor
1
Quel est le problème avec l'installation de seulement 3 Go de bibliothèques? Vous ne voudriez pas déployer toutes ces bibliothèques, mais ce n'est pas parce que vous avez 3 Go de bibliothèques installées que vous devez tout déployer. Et c'est une petite quantité d'espace disque dur ces jours-ci. J'utilise actuellement une installation anaconda et je gère mes environnements avec venv, mais je réfléchissais à l'opportunité d'utiliser conda pour mes environnements virtuels aussi (je ne pense pas que je le ferai - venv me semble être un flux de travail plus fluide).
David
@David Je suis un peu en retard, mais pouvez-vous développer Venv me semble être un flux de travail plus fluide ?
AMC
1

Analogie simple:

  • pyenv ~ rbenv
  • pip ~ bundler
  • virtual env ~ gemset dans rvm. Cela peut être géré directement par bundler sans gemset.

Depuis que j'utilise python3, je préfère l'environnement virtuel intégré python3 nommé venv . venv est simple et facile à utiliser. Je vous recommande de lire ses documents officiels. La doc est courte et concise.

Dans ruby, nous n'avons pas vraiment besoin d'un environnement virtuel car le bundler s'en charge. L'environnement virtuel et le bundler sont excellents, mais ils ont un concept différent mais ils essaient de résoudre le même problème.

channa ly
la source