web-dev-qa-db-fra.com

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 pouvais l'exécuter 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?

29
Kevin

L'utilisation du système et des bibliothèques Python vous limite à une version spécifique de Python, choisie par votre fournisseur de système d'exploitation. Si vous essayez d'exécuter toutes les applications Python sur une seule installation Python, il est probable que des conflits de versions se produisent entre la collection de bibliothèques. Il est également possible que des modifications apportées au système Python annulent d'autres fonctionnalités du système d'exploitation qui en dépendent.

Les environnements virtuels, ou "virtualenvs" sont des installations Python légères et autonomes, conçues pour être configurées avec un minimum de tracas et pour "fonctionner juste" sans nécessiter une configuration étendue ou des connaissances spécialisées.

virtualenv évite d'avoir à installer les packages Python globalement. Lorsqu'un virtualenv est actif, pip installera des packages dans l'environnement, ce qui n'aura aucune incidence sur l'installation de base de Python.

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

$ python3 -m venv ENV_DIR

Pour Windows, vous devez remplacer python3 par le chemin complet de python.exe:

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

(Ceci est une installation typique de Python; votre système peut varier.)

Dans les versions antérieures 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 devrait être un répertoire inexistant. Le répertoire peut avoir n'importe quel nom, mais pour que ces instructions restent simples, je supposerai que vous avez créé votre virtualenv dans un répertoire appelé venv (par exemple avec python3 -m venv ./venv).

Pour travailler dans votre virtualenv, vous l'activez:

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

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

$ venv\Scripts\activate

Le (venv) dans l'invite du shell vous permet de savoir quel virtualenv vous avez activé, mais vous pouvez désactiver cette fonctionnalité si vous ne l'aimez pas. Vous pouvez exécuter toutes les commandes Python habituelles et elles seront locales à votre virtualenv:

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

python exécutera la version de Python que vous avez installée dans votre virtualenv. Par exemple, vous n'avez pas besoin de taper python3 pour obtenir Python 3. Le Python qu'il exécute aura accès à tous les modules de bibliothèque standard et à tous les packages. vous avez installé dans virtualenv, mais (par défaut) aucun des packages installés dans le répertoire site-packages du système.

Cette dernière règle est importante: en limitant votre virtualenv à l'utilisation exclusive de packages installés localement, vous pouvez ainsi contrôler avec précision les dépendances utilisées par votre projet, même si un nouveau package à l'échelle du système est installé ou mis à jour la semaine prochaine. Si vous le souhaitez, vous pouvez obtenir une liste de vos packages installés:

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

pip peut également analyser ce format et l'installer à partir de celui-ci. Les mêmes versions seront installées, même si des mises à jour ont été publiées entre-temps:

(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 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 le souhaitez, sans interférer les uns avec les autres, ni avec vos packages système. Un virtualenv est "juste" un répertoire avec un tas de binaires et de scripts, vous pouvez donc supprimer un virtualenv de la même façon que vous supprimez tous les répertoires (rm -r venv sous Unix). Si virtualenv est activé lorsque vous le supprimez, vous risquez de confondre votre shell. C'est donc une bonne idée de deactivate d'abord dans ce cas.

35
Kevin

Parfois, les privilèges root ne vous sont pas accordés et vous risquez de ne plus pouvoir utiliser Sudo. Il est souvent déconseillé d’utiliser Sudo pour installer des packages, car cela risquerait d’écraser ceux qui pourraient être utilisés par d’autres applications.

Virtualenv peut vous aider à créer un environnement séparé dans lequel vous n’avez pas besoin des privilèges root, mais aussi à pouvoir personnaliser l’environnement en fonction de vos besoins. Il s'agit d'une installation Python autonome qui n'interagit qu'avec votre environnement créé spécifique.

En gros, cela vous laisse un peu de liberté et vous évite d’endommager (ou de modifier) ​​l’environnement racine qui hébergerait de nombreuses fonctionnalités anciennes d’anciennes applications. 

L'installation est assez facile aussi. 

4
f3n1Xx

L'installation de packages avec pip et Sudo installera les packages de manière globale, ce qui peut endommager certains outils système. 

Par installer globalement, cela signifie que vous installerez vos paquets sur place, comme /usr/lib/python2.7/site-package. Par conséquent, si certains paquets ont besoin d’une version précédente de vos paquets python, cette action pourrait la rompre.

virtualenv vous permet d'éviter d'installer globalement les packages Python en créant des environnements Python isolés. Cela signifie qu’il installera les packages uniquement dans le dossier de votre projet souhaité.

Sur mac et linux

  • Installer

python3 -m pip install --user virtualenv

  • Créer une Env virtuelle: Accédez au dossier de votre projet souhaité

python3 -m virtualenv env

  • Activer un virtualenv: Dans le dossier de votre projet

source env/bin/activate

Après l'activation, vous pouvez installer vos paquets en utilisant pip

Pour plus d’informations sur son utilisation sous Windows: Comment utiliser virtaulen sous Windows

0
Hadi Rasekh