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


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

pip install <name of package>

Je reçois des erreurs de permission et je ne sais pas pourquoi. Je pourrais le courir avec sudo, mais quelqu'un m'a dit que c'était une mauvaise idée, et je devrais plutôt utiliser virtualenv.

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


25
2018-02-01 05:06


origine


Réponses:


UNE virtualenv est une installation Python légère et autonome. Ils sont conçus pour être configurés avec un minimum de tracas et pour "simplement fonctionner" sans nécessiter une configuration étendue ou des connaissances spécialisées.

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

$ python3 -m venv ENV_DIR

Pour Windows, vous devez remplacer python3 avec le chemin complet vers python.exe:

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

(Il s’agit d’une installation Python typique; 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 devrait être un répertoire inexistant. Le répertoire peut avoir n'importe quel nom, mais pour garder ces instructions simples, je suppose 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 pouvez savoir quelle virtualenv vous avez activée, 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, donc (par exemple) vous ne devez pas 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 paquets que vous avez installés dans virtualenv, mais (par défaut) aucun des paquets installés dans le système site-packages annuaire.

Cette dernière règle est importante: en limitant votre virtualenv à n’utiliser que des packages installés localement, vous pouvez vous assurer de contrôler exactement les dépendances de 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 paquets installés:

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

pip peut également analyser ce format et l'installer, et il installera les mêmes versions, 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 et ils n'interféreront pas entre eux, ni avec vos packages système. Un virtualenv est "juste" un répertoire contenant un tas de binaires et de scripts, vous pouvez donc supprimer virtualenv de la même manière que vous supprimez un répertoire (rm -r venv sur Unix). Si virtualenv est activé lorsque vous le supprimez, vous risquez de confondre votre shell, ce qui en fait une bonne idée de deactivate d'abord dans ce cas.


29
2018-02-04 14:24



Parfois, vous ne bénéficiez pas des privilèges root et vous risquez de ne pas pouvoir utiliser sudo. Bien souvent, il est déconseillé d’utiliser sudo pour installer des paquets, car cela risque d’écraser certains paquets 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 de privilèges root et pouvez adapter l’environnement à vos besoins. Il s'agit d'une installation Python autonome qui n'interagit qu'avec votre environnement spécifique.

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

L'installation est assez facile aussi.


2