En Python 3.3+ avec venv intégré
À partir de Python 3.3, le virtualenv
est désormais intégré à Python sous la forme du package venv
module. Il y a quelques différences mineures, dont l'une est le module --relocatable
a été supprimée. Par conséquent, il est normalement préférable de recréer un environnement virtuel plutôt que d'essayer de le déplacer. Voir cette réponse pour plus d'informations sur la façon de le faire.
Quel est le but de vouloir déplacer plutôt que de simplement recréer un environnement virtuel ? Un environnement virtuel est destiné à gérer les dépendances d'un module ou d'un paquet avec le venv, de sorte qu'il puisse avoir des versions différentes et spécifiques d'un paquet ou d'un module donné dont il dépend, et permettre un emplacement pour que ces choses soient installées localement.
Par conséquent, un paquet doit fournir un moyen de recréer le venv à partir de zéro. Typiquement, ceci est fait avec un requirements.txt
et parfois aussi un fichier requirements-dev.txt
et même un script pour recréer le venv dans le setup/install du paquet lui-même.
Une partie qui peut donner des maux de tête est que vous pouvez avoir besoin d'une version particulière de Python comme exécutable, ce qui est difficile à automatiser, si ce n'est pas déjà présent. Cependant, lors de la recréation d'un environnement virtuel existant, on peut simplement exécuter python à partir du venv existant lors de la création du nouveau. Après cela, il suffit généralement d'utiliser pip pour réinstaller toutes les dépendances de l'environnement virtuel. requirements.txt
fichier :
Depuis Git Bash sur Windows :
python -m venv mynewvenv
source myvenv/Scripts/activate
pip install -r requirements.txt
Cela peut devenir un peu plus compliqué si vous avez plusieurs dépendances locales provenant d'autres paquets développés localement, car vous pouvez avoir besoin de mettre à jour les chemins absolus locaux, etc. - Cependant, si vous les configurez comme des paquets Python corrects, vous pouvez les installer à partir d'un dépôt git, et ainsi éviter ce problème en ayant une URL statique comme source.