Cette question n'est pas un doublon.
Il ne s'agit pas seulement de renommer un environnement virtuel, mais aussi de le déplacer vers un répertoire différent, y compris, potentiellement, le répertoire d'un autre utilisateur.
Ce n'est pas la même chose que de simplement renommer un environnement virtuel, en particulier pour les personnes qui ne connaissent pas les virtualenvs.
Si je crée un virtualenv et que je le déplace vers un autre dossier, cela fonctionnera-t-il toujours?
$ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv
$ source Env/my-python-venv/bin/activate
(my-python-venv) $
... plus tard dans la journée, l'environnement virtuel A DÉPLACÉ ...
(my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/
Question:
Est-ce que ça va marcher?
$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas
Je veux dire cela comme moins une question sur la sagesse d'essayer ceci (à moins que cette sagesse soit humoristique, bien sûr), et plus sur la question de savoir si c'est possible. Je veux vraiment savoir s'il est possible de le faire en Python 3, ou si je dois juste l' aspirer et le cloner.
Puis-je juste mv
un virtualenv
comme ça sans tristesse? Je veux éviter la tristesse.
la source
Scripts
répertoire (équivalent àbin
on * nix) et dit quelque chose commeactivate.ps1 cannot be made relative (it's not a normal script that starts with #!c:\..python.exe.
fondamentalement, il se plaint que le hachage dans le fichier l'en-tête n'est pas le python.exe de virtualenv actuel, c'est celui que j'ai déplacé de -easy fixed. J'ai regardé dans ce script chic et il découvre déjà son propre chemin de toute façon - sympa. Certains des autres scripts ne reposent pas non plus sur des chemins (par exemple, deactivate.bat), donc en bref, cela fonctionne.activate.ps1 cannot be made relative
peut être ignoré car ce script est déjà relatif. Le message n'est pas utile sous Windows, car les scripts n'utilisent pas de#!
directives comme sous Linux pour indiquer au shell quelle application doit l'exécuter. Leactivate.bat
n'est pas modifié, mais il n'est pas utilisé (au moins sur Windows 10, l'appelactivate
lance le script PoSH) donc non, je n'ai pas eu besoin de modifier les scripts. Le problème est de savoirpip.exe
qui a un chemin vers python codé en dur et doit être modifié avec un éditeur hexadécimal, ou simplement une réinstallation.pip freeze
un fichier d'exigences afin que vous puissiez facilement réinstaller tous vos packages, docker (fonctionne bien avec virtualenv installé dessus), conda, pyenv ou d'autres outils. Vous devriez pouvoir créer et détruire des environnements en tant qu'infrastructure immuable, ils ne devraient pas être précieux.Pour Python 3.3+ (avec un nouveau
venv
module intégré)Réponse courte (quelle que soit la version):
Longue réponse:
Depuis Python v3.3,
virtualenv
est devenu un module intégré nommévenv
.L'
--relocatable
option mentionnée dans d'autres réponses n'a pas été incluse dansvenv
, et actuellement, il n'y a pas de moyen sûr et sûr à ma connaissance de renommer ou de déplacer un environnement virtuel Python.Cependant, il existe un moyen assez simple de recréer simplement un environnement virtuel, avec tous ses packages actuellement installés. Consultez cette réponse ou consultez la section ci-dessous pour obtenir des informations sur la recréation d'un environnement virtuel. Au cours du processus, vous pouvez recréer le nouvel environnement dans n'importe quel endroit et avec le nom de votre choix. Ou consultez la section ci-dessous pour le processus.
Dans cette réponse, il mentionne quelques autres packages tiers qui peuvent prendre en charge les changements de noms ou les déplacements directs. Si vous êtes décidé à rechercher un moyen de déplacer un environnement virtuel intact, vous pouvez vérifier si ceux-ci fonctionnent
venv
également.Remarque: Dans cette réponse, il est axé sur
virtualenv
, plutôt que survenv
. Voir ci-dessous pour savoir comment traduire.venv
vsvirtualenv
syntaxe de commande plus ancienneLa commande à utiliser
venv
est:plutôt que simplement
virtualenv
, qui s'installe en tant que commande dans le package d'origine. Où «python» fait référence à la façon dont vous exécutez votre exécutable python, ce qui peut être une variété de choses, telles que:python
py
oupy -3.7
ou similaire (le lanceur Python pour Windows pour Python 3.3+ et Windows uniquement pour le moment)python3
(convention pour les environnements Linux qui installent en double python 2 et 3)c:\program files\python37\python.exe
Si vous ne savez pas quelle version est exécutée, vous pouvez toujours
python --version
le savoir.Comment recréer un environnement virtuel
Créer / recréer un environnement virtuel est facile et devrait devenir une seconde nature après avoir travaillé un peu avec eux. Ce processus reflète ce que vous feriez pour distribuer votre script en tant que package (avec ses dépendances) dans la première moitié, puis ce que quelqu'un ferait pour installer votre script / package pour un développement ultérieur.
Tout d'abord, obtenez une liste mise à jour de ce qui se trouve dans l'environnement virtuel. Lorsqu'il est actif, obtenez la version de Python qu'il utilise et enregistrez la liste des dépendances dans un fichier.
Utiliser
python --version
avec l'environnement virtuel activé pour voir quelle version de Python il utilise.Utilisez
python -m pip freeze > requirements.txt
pour créer la liste des dépendances actuelles du package et les mettre dans lerequirements.txt
fichier. Cette commande fonctionne sous Linux ou Git Bash à coup sûr - pas sûr à 100% de Powershell ou de la ligne de commande sous Windows.Créez maintenant un nouvel environnement virtuel, puis ajoutez les dépendances de l'ancien.
Faites votre nouveau venv.
python
comme commandepython.exe
dans le dossier de l'environnement virtuelpython -m venv my_new_venv
de créer un nouvel environnement virtuel dans le répertoire de travail actuel dans un nouveaumy_new_venv
dossier.Installez vos dépendances à partir du
requirements.txt
fichier.python -m pip install -r requirements.txt
Vous devrez peut-être réinstaller les packages locaux qui sont en mode de développement.
Notez que si vous avez besoin de voir l'emplacement spécifique dans lequel un package est installé, utilisez:
python -m pip list -v
-v
option ou "verbose" ajoutera des informations supplémentaires sur chaque paquet qui est installé, y compris le chemin dans lequel il est installé. Ceci est utile pour vous assurer que vous gardez les paquets virtuels, utilisateur et système installés.À ce stade, vous pouvez simplement supprimer l'ancien dossier venv et tout son contenu. Je recommande d'utiliser une interface graphique pour cela - les suppressions de fichiers sont souvent permanentes à partir de la ligne de commande Linux, et une petite faute de frappe peut être une mauvaise nouvelle.
la source
pip wheel . -w wheels
, puis réinstaller simplement les packages dans le nouvel environnement virtuel avecpip install --no-index --find-links /path/to/wheels/ -r requirements.txt
L'
--relocatable
argument àvirtualenv
semble vous permettre de faire cela.la source
virtualenv --relocatable my-python-venv
APRÈS que l'environnement existe déjà.--help
:This fixes up scripts and makes all .pth files relative
. Non, cela ne fera pas de bibliothèques indépendantes de la plate-forme. Si vous souhaitez le déplacer sur une plate-forme différente, vous devez le réinstaller en fonction du python local.MAIS HÉLAS:
Non, vous ne pouvez pas simplement
mv
. Il existe des solutions de contournement, mais il peut être plus facile de réinstaller.(my-python-venv)$ /home/me/PeskyPartyPEnvs/pip3 install foaas zsh: /home/me/PeskyPartyPEnvs/pip3: bad interpreter: /home/me/Env/my-python-venv/bin/python3: no such file or directory (my-python-venv)$ deactivate $
... presse
enter
beaucoup dans la frustration, et les travaux suivantsSauf que ce n'est pas de la
my-python-venv
tristesse.Vous voulez
mv
votrevirtualenv
et l'utiliser, sinon non modifié?Réponse courte:
Eh bien, tu ne peux pas .
la source
find bin -type f -exec ex -sc "%s,${FROM},${PWD},g|x" {} \;
supposer que votre bin et votre lib sont dans votre dossier venv actuel. J'utilise cela comme un moyen rapide et sale de copier et de déplacer des environnements virtuels python3 avec de nombreux packages pip installés.--relocatable
? Aussi, Nathan, excellente question mais c'est une réponse terrible. Accepter sa propre réponse est toujours un peu biaisé, sauf si elle est bien écrite et énumère clairement les options, mais déterminer que vous-même serait de toute façon subjectif.mv
un venv?", Et la réponse est "non, vous ne pouvez pas simplementmv
, il existe des solutions de contournement mais il pourrait être plus facile de réinstaller". Si c'était la meilleure réponse, cela ferait gagner du temps à moi et à d'autres.Oui, cela devrait être possible si vous n'avez rien fait qui dépend du répertoire actuel du virtualenv.
Cependant, si vous avez le choix, la meilleure chose à faire est de créer un nouveau virtualenv et de commencer à utiliser le nouveau virtualenv à la place. C'est le choix le plus sûr et le moins susceptible de causer des problèmes plus tard.
La documentation mentionne que :
Par exemple, si vous avez exécuté
setvirtualenvproject
il ne sera pas en mesure de basculer vers le bon répertoire une fois que vous avez exécutéworkon ...
, vous devrez donc résoudre ce problème manuellement.En général, virtualenv n'est guère plus qu'un répertoire avec les fichiers d'interprétation Python nécessaires ainsi que les packages dont vous avez besoin.
la source
En utilisant les réponses à ce sujet et à d'autres sujets sur un sujet similaire, j'ai créé un script bash qui, localisé et exécuté dans le répertoire virtualenv lui - même , vous aidera avec vos déplacements virtualenv.
Après cela,
virtualenv --relocatable yourenv
vous devrez changer votreVIRTUAL_ENV
variable chaque fois que vous déplacez le répertoire, donc si vous ne voulez pas le changer manuellement, utilisez ceci.#!/bin/bash \n DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" EXISTING=$(grep 'VIRTUAL_ENV=' bin/activate) NEWDIR=VIRTUAL_ENV=\"$DIR\" sed -i -e "s|$EXISTING|$NEWDIR|" bin/activate source bin/activate
J'espère que cela aide.
la source
OUI, VOUS POUVEZ! (Dans
windows
)La solution de contournement est simple, déplacez simplement votre environnement virtuel n'importe où, puis modifiez-le à l'
activate.bat
intérieurscripts\
:Déplacer vers l'environnement virtuel vers le répertoire souhaité
Cliquez avec le bouton droit de la souris et modifiez
activate.bat
situé àvenv_folder\scripts
.Changer la
VIRTUAL_ENV
variable de:dans
Enregistrez le fichier de commandes édité, et c'est tout!
REMARQUE: ma solution devrait fonctionner et enregistrer la
windows users
configuration de nouveaux environnements virtuels, je doute que cela fonctionnera dans un autre système d'exploitation car il.bat
provient deMS-DOS
la source
old_directory
pourold_directory
- est-ce une faute de frappe?