92 votes

Qu'est-ce qu'un virtualenv et pourquoi devrais-je en utiliser un?

J'essaye d'installer un paquet Python avec cette commande

 pip install <name of package>
 

Je reçois des erreurs d'autorisation et je ne sais pas pourquoi. Je pourrais le lancer avec sudo , mais quelqu'un m'a dit que c'était une mauvaise idée et que je devrais utiliser virtualenv à la place.

Qu'est-ce qu'un virtualenv? Que fait-il pour moi?

105voto

Kevin Points 15

Fonctionnant avec le système de Python et des bibliothèques vous limite à une fonction spécifique à la version de Python, choisi par le fournisseur de votre système d'exploitation. Essayez d'exécuter toutes les applications Python sur une installation de Python, il est probable que des conflits de version se fera parmi la collection de bibliothèques. Il est également possible que des changements dans le système Python casser d'autres fonctionnalités du système d'exploitation qui en dépendent.

Les environnements virtuels, ou "virtualenvs" sont légers, autonomes Python installations, conçu pour être mis en place avec un minimum de tracas, et à "travailler" sans exiger de la configuration complète ou des connaissances spécialisées.

virtualenv évite le besoin d'installer les paquets Python à l'échelle mondiale. Lorsqu'un virtualenv est active, pip va installer les paquets dans l'environnement, qui n'a pas d'incidence sur la base d'installation de Python en aucune façon.

En Python 3.3 ou ultérieure, vous pouvez créer un virtualenv comme suit:

$ python3 -m venv ENV_DIR

Pour Windows, vous devez remplacer l' python3 avec le chemin d'accès complet python.exe:

>C:\Python34\python.exe -m venv ENV_DIR

(Ceci est un exemple typique d'installation de Python; votre système peut varier.)

Dans les anciennes versions de Python, y compris Python 2, l'une des commandes suivantes devrait fonctionner dans la plupart des cas:

$ virtualenv ENV_DIR
$ venv ENV_DIR
$ pyvenv ENV_DIR
$ pyvenv3 ENV_DIR

ENV_DIR doit être un répertoire inexistant. Le répertoire peut avoir n'importe quel nom, mais pour conserver ces instructions simples, je suppose que vous avez créé votre virtualenv dans un répertoire appelé venv (par ex. avec de l' python3 -m venv ./venv).

Votre travail dans le virtualenv, vous pouvez l'activer:

$ . ./venv/bin/activate
(venv)$ 

Ou utilisez ceci si vous avez un système windows:

$ venv\Scripts\activate

L' (venv) dans l'invite du shell vous permet de savoir qui virtualenv vous avez activés, mais vous pouvez désactiver cette fonction si vous ne l'aimez pas. Vous pouvez exécuter toutes les commandes Python, et ils seront à proximité de votre virtualenv:

(venv)$ pip install requests numpy
[...]
(venv)$ python
[...]
>>> import requests
>>> import numpy as np
>>> 

python va exécuter la version de Python que vous avez installé dans votre virtualenv, de sorte que (par exemple) vous n'avez pas à taper python3 pour obtenir Python 3. Le Python qu'il fonctionne aurez accès à tous les modules de la bibliothèque standard et tous les paquets que vous avez installés dans le virtualenv, mais (par défaut) aucun des paquets installés sur le système-large site-packages répertoire.

Cette dernière règle est importante: en limitant vos virtualenv à utiliser uniquement localement les paquets installés, vous pouvez vous assurer que vous contrôlez exactement qui dépendances de votre projet, même si certaines nouvelles à l'échelle du système de package est installé ou mis à jour la semaine prochaine. Si vous le désirez, vous pouvez obtenir une liste des paquets installés:

(venv)$ pip freeze
requests==2.13.0
numpy==1.12.0
(venv)$ 

pip pouvez également analyser ce format et installer à partir d'elle, et il va installer la même version, même si les mises à jour ont été publiées dans l'intervalle:

(venv)$ pip freeze >requirements.txt

(some-other-venv)$ pip install -r requirements.txt
[...]
(some-other-venv)$ python
>>> import requests
>>> import numpy as np
>>> 

Vous pouvez sortir de la virtualenv en le désactivant:

(venv)$ deactivate
$ python
[...]
>>> import requests
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'requests'

Vous pouvez créer autant de virtualenvs que vous aimez, et ils ne seront pas interférer les uns avec les autres, ni avec votre système de paquets. Un virtualenv est "juste" un répertoire avec un tas de fichiers binaires et des scripts sous elle, de sorte que vous pouvez supprimer un virtualenv la même façon de supprimer un répertoire (rm -r venv sur Unix). Si le virtualenv est activé lorsque vous le retirez, vous pouvez confondre votre shell, donc c'est probablement une bonne idée d' deactivate premier dans ce cas.

8voto

f3n1Xx Points 115

Quelques fois vous n'avez pas les privilèges root et vous pourriez ne pas être en mesure d'utiliser sudo. De nombreux autres fois, il n'est pas conseillé d'utiliser sudo pour installer des paquets qu'il peut remplacer un paquet qui peut être utilisé par d'autres applications.

Virtualenv peut vous aider à créer un environnement où vous n'avez pas besoin des privilèges root ainsi que d'être en mesure d'adapter l'environnement en fonction de votre besoin. Il se compose d'auto-contenue installation de python qui n'interagit avec votre environnement créé.

Donc, fondamentalement, il vous donne un peu de liberté ainsi que d'éviter de l'endommager (ou de modifier) la racine de l'environnement qui pourrait être l'hôte de beaucoup de vieilles fonctionnalités des anciennes applications.

L'Installation est très facile.

7voto

Hadi Rasekh Points 647

L'installation des packages avec pip et sudo installera les paquets à l'échelle mondiale, ce qui peut briser certains outils du système.

Par installer globalement, cela signifie que vous allez installer vos paquets en place, comme /usr/lib/python2.7/site-package donc si certains paquets ont besoin d'une version précédente de votre paquet python, cette action peut casser.

virtualenv permet d' éviter l'installation de paquets Python à l'échelle mondiale en isolé python environnements. Cela signifie qu'il va installer les paquets juste dans votre désir dossier de projet.

Sur mac et linux

  • Installer

python3 -m pip install --utilisateur virtualenv

  • Création d'un Virtuel Env: Allez à votre désir dossier de projet

python3 -m env virtualenv

  • L'activation d'un virtualenv: Dans votre désir dossier de projet

source env/bin/activate

Après l'activation, vous pouvez en installer vos paquets à l'aide de pip

Pour plus d'informations sur son utilisation dans Windows: Comment utiliser virtaulen dans Windows

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