169 votes

Renommer un dossier virtualenv sans le casser

J'ai créé un dossier et initialisé une instance de virtualenv dans celui-ci.

$ mkdir myproject
$ cd myproject
$ virtualenv env

Quand je cours (env)$ pip freeze il affiche les paquets installés comme il se doit.

Maintenant, je veux renommer myproject/ à project/ .

$ mv myproject/ project/

Cependant, maintenant, lorsque je lance

$ . env/bin/activate
(env)$ pip freeze

il dit que pip n'est pas installé. Comment puis-je renommer le dossier du projet sans casser l'environnement ?

13voto

Antony Hatchkins Points 5831

Une autre façon de procéder, qui a fonctionné pour moi plusieurs fois sans problème, est la suivante virtualenv-clone :

pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env

8voto

Ignacio Points 185

Exécutez ceci dans votre dossier de projet :

cd bin
sed -i 's/old_dir_name/new_dir_name/g' *

N'oubliez pas de désactiver et d'activer.

1voto

Six Points 1734

virtualenv --relocatable ENV n'est pas une solution souhaitable. Je suppose que la plupart des gens veulent pouvoir renommer une virtualenv sans des effets secondaires à long terme.

J'ai donc créé un outil simple pour y parvenir. La page du projet pour virtualenv-mv le décrit un peu plus en détail, mais essentiellement vous pouvez utiliser virtualenv-mv tout comme vous utiliseriez une simple mise en œuvre de l'option mv (sans aucune option).

Par exemple :

virtualenv-mv myproject project

Notez cependant que je viens de le pirater. Il pourrait se briser dans des circonstances inhabituelles (par exemple, des virtualenvs symlinkés), alors soyez prudent (sauvegardez ce que vous ne pouvez pas vous permettre de perdre) et faites-moi savoir si vous rencontrez des problèmes.

1voto

LightCC Points 1158

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.

0voto

Niels Points 603

Une solution encore plus simple qui a fonctionné pour moi : copier simplement le fichier site-packages de votre ancien environnement virtuel dans un nouveau.

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