38 votes

python : quelle est la différence entre pythonbrew et virtualenv ?

Je suis novice en python et j'envisage d'apprendre django. J'ai eu un peu d'expérience avec ruby (pas rails) et je suis familier avec RVM Cependant, je ne comprends pas la différence entre pythonbrew y virtualenv . Je sais pythonbrew est une imitation de RVM mais je pensais virtualenv fait déjà ce que fait RVM (ou vice versa que pythonbrew fait déjà ce que fait RVM). Quelqu'un peut-il m'expliquer et peut-être me fournir quelques exemples/utilisations concrètes pour m'aider à comprendre. Merci beaucoup !

51voto

Brian Clapper Points 11222

Pythonbrew s'apparente à l'outil Ruby rvm : C'est une fonction du shell qui vous permet de :

  • Construire une ou plusieurs versions complètes et autonomes de Python, chacune étant stockée localement. sous votre répertoire personnel. Vous pouvez construire plusieurs versions de Python de cette manière.
  • Passez facilement d'une version à l'autre de Python.

Les Python que vous construisez sont complètement isolés les uns des autres et des versions de Python installées sur le système.

Virtualenv est similaire, mais pas tout à fait identique. Il crée un environnement virtuel Python qui, conceptuellement, se trouve au-dessus d'une installation Python existante (généralement celle du système, mais pas toujours). Par défaut, sur les plates-formes Unix (et Mac), il crée des liens symboliques vers les différents modules de la bibliothèque Python, de sorte que vous partagez littéralement ces modules avec la "vraie" implémentation Python sous-jacente. Mais, virtualenv possède son propre répertoire "bin" et son propre répertoire "site-packages". Tout ce que vous installez dans l'environnement virtuel Python n'est disponible que dans cet environnement.

L'un des avantages de Pythonbrew est que les environnements Python qu'il crée sont vraiment, et complètement, autonomes. Ils ne peuvent pas être contaminés par quoi que ce soit qui se soit produit dans une installation de base de Python, parce qu'il n'y a pas d'installation de base sous-jacente. Ce n'est pas le cas des environnements virtualenv. Si vous créez un Python virtualenv, et que d'une manière ou d'une autre vous détériorez l'instance de Python de base au-dessus de laquelle il se trouve (par exemple, en supprimant accidentellement une partie du répertoire "site" du Python de base alors que vous êtes connecté en tant que Root), vous détériorerez également tout environnement virtualenv basé sur ce Python.

Cependant, virtualenv a ses propres avantages. Le plus grand avantage est probablement sa légèreté. Comme Pythonbrew compile Python à partir de zéro, la création d'un environnement Pythonbrew prend un certain temps. En comparaison, la création d'un environnement Python virtualenv est très rapide.

Vous pouvez, en fait, les utiliser ensemble. Voici une situation où vous pourriez vouloir le faire.

  • Votre système de base utilise Python 2.6.
  • Vous devez installer Python 2.7.
  • Pour une raison quelconque, vous ne pouvez pas (ou ne voulez pas) installer Python 2.7 dans tout le système, côte à côte avec Python 2.6.

Dans ce cas, vous pouvez utiliser Pythonbrew pour installer une version de base de Python 2.7. sous votre répertoire personnel où il n'y a pas de conflit avec ce qui est installé ailleurs. Ensuite, vous pouvez créer un ou plusieurs environnements Python virtualenv légers qui sont basés sur votre Python 2.7 installé par Pythonbrew. Par exemple, vous pouvez utiliser virtualenv pour créer des environnements de test éphémères pour Python 2.7 de cette manière.

Je doute que la plupart des gens le fassent réellement. (Je ne le fais pas.) Mais il n'y a aucune raison pour que vous ne puissiez pas le faire.

4voto

Pengman Points 486

Pour ce que ça vaut, je n'ai jamais entendu parler de PythonBrew, mais je connais (et j'aime) virtualenv.

Virtualenv est utilisé pour créer des environnements séparés, basé sur sur l'installation de python que vous avez sur votre machine. Autrement dit, si j'ai python 2.7, je peux créer un certain nombre d'environnements python 2.7 isolés, mais je ne peux pas créer d'environnements python 2.6.

Según ce (que j'ai trouvé via google) Pythonbrew semble se concentrer sur l'installation d'autres versions de python. Je suppose donc que vous utiliserez 'brew pour installer py2.6 et 2.7, puis virtualenv pour créer des environnements pour chacun.

Ou, il semble que 'brew puisse aussi créer les environnements, en utilisant virtualenv.

Pourquoi un interpréteur python différent n'est pas vraiment un environnement isolé.

Chaque installation python possède un ensemble de paquets (placés dans 'site-packages' je crois). Si vous installez un nouveau paquet, il est ajouté à cet ensemble, et disponible pour tout votre code python.

Cela peut être un problème si vous avez un projet que vous construisez sur Django0.96 et que vous voulez commencer un nouveau projet en utilisant Django1.3. Si vous mettez à jour la version de Django de votre système, cela affectera également votre ancien projet.

Avec virtualenvs, vous pouvez créer un environnement avec Django1.3 et un autre avec Django0.96, les deux étant en python2.7. Si vous étiez d'accord pour exécuter votre ancien projet en python2.6 et le nouveau en python2.7, vous pouviez le faire aussi, mais qu'en est-il de vos deux prochains projets utilisant des versions différentes de Django-Trunk ?

2voto

wliao Points 621

Python brew est pour la construction et l'installation, peut-être comme un buildbot. Je ne suis pas très familier. Virtualenv est principalement pour, quand vous avez une version différente de python, ou vous voulez essayer un paquet sans déranger la version du système.


Ok, cela révèle quelque chose

Créer des environnements python isolés (utilise virtualenv ):

pythonbrew venv init
pythonbrew venv create proj
pythonbrew venv list
pythonbrew venv use proj
pythonbrew venv delete proj

De http://pypi.python.org/pypi/pythonbrew/

1voto

alexandroid Points 342

Comme toutes les réponses ci-dessus sont assez anciennes, j'aimerais résumer mes conclusions ici. J'ai essayé de comprendre comment cela fonctionne avec Python après être venu de rvm/ruby et je n'ai pas pu trouver d'explication claire nulle part en ligne.

Nous avons donc les options suivantes sur Macos :

Homebrew (MacOS uniquement)

...Peut installer python y python3 . Ils seront stockés dans la cave de Homebrew et mis en lien symbolique à partir de /usr/local/bin . Défaut python installé en utilisant brew est 2.7.6 à l'heure actuelle.

Les paquets installés à l'aide de pip ira dans l'emplacement par défaut (vous avez aussi pip y pip3 symlinked aussi).

Pyenv (successeur de Pythonbrew)

...Est une alternative à Homebrew (sur Macos) pour installer et maintenir plusieurs versions de Python. Linux ne dispose pas de Homebrew, Pyenv en est donc une version spécialisée pour Python. Il construit également Python à partir des sources.

Pyenv conserve les installations de python dans ~/.pyenv/versions/ et permet de passer rapidement d'un nom à l'autre et d'utiliser les mêmes noms pour les binaires ( python , pip etc). Il utilise des binaires "shim" qui sont de faux binaires tels que python , pip etc. qui imitent ceux de Python et redirigent silencieusement l'exécution vers la version actuellement active.

Les paquets installés à l'aide de pip va passer à l'installation active de Python.

Donc, aucune de ces méthodes n'est vraiment suffisante pour maintenir des installations python séparées. et des ensembles de versions de paquets (comme rvm le fait avec les gemsets) par projet. Ainsi :

Virtualenv

...est la chose la plus proche de RVM. Pour citer ce poste :

il crée une copie propre de Python dans un nouveau répertoire en copiant ou en liant les fichiers de votre installation principale de Python pour créer de nouveaux répertoires bin et lib.

Il utilise donc le copie actuellement active de Python et le copie dans un répertoire séparé. virtualenvwrapper ajoute une fonctionnalité permettant de gérer ces environnements et de les activer automatiquement à l'aide de la fonction cd juste comme rvm fait.

Cela permet d'isoler la version de python et les bibliothèques installées utilisées pour chaque projet. Cependant, il n'installe pas python les versions elles-mêmes.

Ainsi, il semble que la plupart des gens utilisent une combinaison de pyenv + virtualenv o brew + virtualenv (le brassage est spécifique à Macos bien sûr). La première partie est utilisée pour installer les versions de python (si nécessaire) et la seconde est utilisée pour les cloner pour différents projets et passer de l'un à l'autre.

PS : Je commence à peine à comprendre, corrigez-moi si quelque chose est faux.

PPS : Il me semble que toute cette affaire peut être améliorée en combinant pyenv et virtualenv sous un même toit...

0voto

Marcin Points 25366
"pythonbrew is a program to automate the building and installation 
 of Python in the users $HOME."

En revanche, virtualenv fournit un environnement isolé pour le développement d'un projet - il conserve toutes les bibliothèques de ce projet au même endroit, et il facilite grandement la relocalisation (et donc le déploiement) du projet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X