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 ?

151voto

ire_and_curses Points 32802

Vous devez ajuster votre installation pour utiliser les chemins relatifs. virtualenv y pourvoit avec le --relocatable option. À partir de les docs :

Normalement, les environnements sont liés à un chemin spécifique. Cela signifie que vous ne pouvez pas déplacer un environnement ou ou le copier sur un autre ordinateur. Vous pouvez réparer un environnement pour le rendre déplaçable à l'aide de la commande :

$ virtualenv --relocatable ENV

NOTE : ENV est le nom de l'environnement virtuel et vous devez l'exécuter en dehors du répertoire ENV.

Cela rendra certains des fichiers créés par setuptools ou distribuer utiliseront des chemins relatifs, et modifieront tous les scripts pour utiliser activate_this.py au lieu d'utiliser le fichier l'emplacement de l'interpréteur Python pour sélectionner l'environnement.

Remarque : vous devez exécuter cette opération après avoir installé les paquets dans l'environnement environnement. Si vous rendez un environnement relocalisable, alors installez un nouveau paquetage, vous devez exécuter virtualenv --relocatable à nouveau.

123voto

holys Points 652

Je crois "savoir pourquoi" est plus important que "savoir comment". . Voici donc une autre approche pour résoudre ce problème.

Lorsque vous exécutez . env/bin/activate il exécute en fait les commandes suivantes (en utilisant la fonction /tmp par exemple) :

VIRTUAL_ENV="/tmp/myproject/env"
export VIRTUAL_ENV

Cependant, vous venez de renommer myproject à project Cette commande n'a donc pas pu être exécutée. C'est pourquoi il est dit pip is not installed parce que vous n'avez pas installé pip dans l'environnement global du système et votre virtualenv pip n'a pas de source correcte.

Si vous voulez régler ce problème manuellement, voici la solution :

  1. Avec votre éditeur préféré comme Vim, modifiez /tmp/project/env/bin/activate généralement à la ligne 42 :

    VIRTUAL_ENV='/tmp/myproject/env' => VIRTUAL_ENV='/tmp/project/env'

  2. Modifier /tmp/project/env/bin/pip en ligne 1 :

    #!/tmp/myproject/env/bin/python => #!/tmp/project/env/bin/python

Après cela, activez votre environnement virtuel env à nouveau, et vous verrez votre pip est revenu à nouveau.

43voto

bnjmn Points 1277

NOTE : Comme le fait remarquer @jb., cette solution ne s'applique qu'à une (re)création facile. virtualenv s. Si l'installation d'un environnement prend plusieurs heures, cette solution n'est pas recommandée.


Les Virtualenvs sont excellents parce qu'ils sont faciles à créer et à modifier ; ils vous empêchent de vous enfermer dans une configuration unique. Si vous connaissez les exigences du projet, ou si vous pouvez les obtenir, Créer un nouveau virtualenv :

  • Créer un requirements.txt fichier

    (env)$ pip freeze > requirements.txt

    • Si vous ne pouvez pas créer le requirements.txt fichier, vérifier env/lib/pythonX.X/site-packages avant de retirer l'original env .
  • Supprimer l'existant (env)

    deactivate && rm -rf env

  • Créer un nouveau virtualenv l'activer, et installer les exigences

    virtualenv env && . env/bin/activate && pip install -r requirements.txt


Vous pouvez également utiliser virtualenvwrapper pour faciliter les choses, car tous les virtualenvs sont conservés dans un emplacement centralisé.

$(old-venv) pip freeze > temp-reqs.txt
$(old-venv) deactivate
$ mkvirtualenv new-venv
$(new-venv) pip install -r temp-reqs.txt
$(new-venv) rmvirtualenv old-venv

29voto

Afrowave Points 113

J'installe toujours virtualenvwrapper pour aider. A partir de l'invite du shell :

pip install virtualenvwrapper

Il existe une méthode documentée dans les documents de virtualenvwrapper. cpvirtualenv Voici ce que vous devez faire. Assurez-vous d'être sorti de votre environnement et de revenir à l'invite du shell. Tapez ceci avec les noms requis :

cpvirtualenv oldenv newenv

Et ensuite, si nécessaire :

rmvirtualenv oldenv

Pour aller dans votre newenv :

workon newenv

18voto

ryankdwyer Points 96

Vous pouvez résoudre votre problème en suivant les étapes suivantes :

  1. renommez votre répertoire
  2. rediffuser ça : $ virtualenv ..\path\renamed_directory
  3. virtualenv corrigera les associations de répertoires tout en laissant vos paquets en place.
  4. $ scripts/activate
  5. $ pip freeze pour vérifier que vos paquets sont en place
  6. Une mise en garde importante, si vous avez des dépendances de chemin statique dans les fichiers script dans votre répertoire virtualenv, vous devrez les modifier manuellement.

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