Je voudrais juste éviter l'utilisation de virtualenv
après Python3.3+ et utiliser à la place la bibliothèque standard expédiée venv
. Pour créer un nouvel environnement virtuel, vous devez taper :
$ python3 -m venv <MYVENV>
virtualenv
essaie de copier le binaire Python dans le répertoire bin de l'environnement virtuel. Cependant, il ne met pas à jour les liens vers les fichiers de bibliothèque intégrés dans ce binaire. Par conséquent, si vous compilez Python à partir des sources dans un répertoire non système avec des noms de chemin relatifs, le binaire Python se casse. Comme c'est ainsi que l'on fait une copie de Python distribuable, c'est un gros défaut. BTW pour inspecter les liens de fichiers de bibliothèque intégrés sous OS X, utilisez otool
. Par exemple, à partir de votre environnement virtuel, tapez :
$ otool -L bin/python
python:
@executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
Par conséquent, j'éviterais virtualenvwrapper
y pipenv
. pyvenv
est déprécié. pyenv
semble être utilisé souvent lorsque virtualenv
est utilisé, mais je m'en tiendrais à l'écart également car je pense que venv
fait aussi ce que pyenv
est conçu pour.
venv
crée des environnements virtuels dans le shell qui sont frais y bac à sable avec bibliothèques installées par l'utilisateur et c'est multi-python sûr .
Frais : parce que les environnements virtuels ne démarrent qu'avec les bibliothèques standard fournies avec python, vous devez réinstaller toutes les autres bibliothèques avec pip install
pendant que l'environnement virtuel est actif.
Sandboxed L'installation de ces nouvelles bibliothèques n'est pas visible en dehors de l'environnement virtuel, vous pouvez donc supprimer l'environnement entier et recommencer sans vous soucier de l'impact sur votre installation de base de python.
Bibliothèques installées par l'utilisateur parce que le dossier cible de l'environnement virtuel est créé sans le nom de l'utilisateur. sudo
dans un répertoire que vous possédez déjà, donc vous n'aurez pas besoin de sudo
les autorisations pour y installer des bibliothèques.
multi-python sûr La raison en est que lorsque les environnements virtuels sont activés, le shell ne voit que la version de python (3.4, 3.5 etc.) qui a été utilisée pour construire cet environnement virtuel.
pyenv
est similaire à venv
en ce sens qu'il vous permet de gérer plusieurs environnements python. Cependant, avec pyenv
vous ne pouvez pas commodément revenir à un état de départ pour les installations de bibliothèques et vous aurez probablement besoin de admin
privilèges à un moment donné pour mettre à jour les bibliothèques. Je pense donc qu'il est également préférable d'utiliser venv
.
Au cours des deux dernières années, j'ai constaté de nombreux problèmes dans les systèmes de construction (paquets emacs, créateurs d'applications autonomes python, installateurs...) qui, en fin de compte, se résument aux problèmes suivants virtualenv
. Je pense que python sera une meilleure plateforme lorsque nous aurons éliminé cette option supplémentaire et que nous utiliserons seulement venv
.
EDIT : Tweet de la BDFL,
J'utilise venv (dans la stdlib) et un tas d'alias shell pour changer rapidement.
- Guido van Rossum (@gvanrossum) 22 octobre 2020
51 votes
Et pour anticiper les votes serrés, j'ai pensé que c'était une question plus générale que stackoverflow.com/questions/29950300/ Je ne me sentais donc pas à l'aise de modifier cette question ou de poster une réponse trop générale sur ce post.
41 votes
Ce guide est à la fois utile et constamment mis à jour, car python continue à ajouter de plus en plus de "one & only one obvious way" pour faire les choses : docs.python-guide.org/fr/latest/dev/virtualenvs
4 votes
Depuis la version 3.6, il est plus facile de faire fonctionner virtualenv que pyenv sur macOS (je suis un pyNoob).
1 votes
@HashRocketSyntax
virtualenv
ypyenv
ne remplissent pas la même fonction, et ne sont pas des alternatives l'une à l'autre. Voir ma réponse.23 votes
J'ai passé une journée entière à perdre du temps avec pipenv. En résumé, c'est trop commercialisé. Venv et virtualenv si vous avez besoin de py2 sont les outils appropriés. Conda (miniconda si vous n'avez pas besoin de la pile complète) est également très bon. Très bon article : chriswarrick.com/blog/2018/07/17/
2 votes
Je ne veux pas être submergé, alors j'utilise Anaconda.
0 votes
"Pourquoi demandez-vous cela ? Avez-vous fait des recherches sur le sujet ? Est-ce que c'est pour les devoirs, peut-être ? Votez à la fin avec des raisons parfaites que je suis prêt à articuler dans Meta." / Votre mod :D
9 votes
Je pense que la réponse acceptée ci-dessous a un parti pris malheureux contre
venv
qui est l'outil correct à utiliser à l'avenir pour Python 3. Il devrait vraiment être le premier sur la liste, suivi devirtualenv
. docs.python.org/3/library/venv.html3 votes
Éviter tous ces problèmes et utiliser simplement
conda
(Miniconda). Il est meilleur que toutes les solutions énumérées ici et les rend toutes obsolètes. En prime, il ne fonctionne pas seulement avec Python, vous pouvez installer une grande variété de logiciels avec lui, pas seulement des paquets Python. Il inclut une installation depip
donc toutes vospip install
continueront à fonctionner normalement. Avecconda
vous pouvez installer en même temps une pile logicielle complète d'applications, comme des versions spécifiques de Django, Gunicorn, Celery, PostgreSQL, RabbitMQ, nginx, Java, R, etc.