2015-09-04 19 views
28

Diese Frage ist kein Duplikat.Kann ich ein virtualenv bewegen?

Es bezieht sich nicht nur auf eine virtuelle Umgebung Umbenennung, sondern tatsächlich es in ein anderes Verzeichnis zu bewegen, darunter möglicherweise auch ein Verzeichnis der verschiedenen Benutzer.

Dies ist nicht das Gleiche wie das Umbenennen einer virtuellen Umgebung, insbesondere für Personen, die nicht mit virtualenvs vertraut sind.

Wenn ich ein virtualenv erstellen, und ich es in einen anderen Ordner verschiebe, wird es noch funktionieren?

$ virtualenv -p /usr/bin/python3 /home/me/Env/my-python-venv 
$ source Env/my-python-venv/bin/activate 
(my-python-venv) $ 

... später an diesem Tag, die virtuelle Umgebung VERSCHOBEN ...

(my-python-venv) $ deactivate 
$ mkdir -p /home/me/PeskyPartyPEnvs 
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/ 

Frage:

Wird diese Arbeit?

$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate 
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas 

Ich meine, das als weniger eine Frage über die Weisheit dieses zu versuchen (es sei denn, dass die Weisheit witzig ist, natürlich), und darüber, ob es möglich ist. Ich möchte wirklich wissen, ob es in Python 3 möglich ist, oder ob ich einfach suck it up habe und es klonen.

Kann ich nur mv ein virtualenv so ohne Traurigkeit? Ich möchte Traurigkeit vermeiden.

+1

//, ich habe den Post bereits gelesen, wie man einen virtualenv umbenennt, aber es gilt nicht für diesen Fall. –

+1

//, Tatsächlich hat das Verschieben eines virtualenv in einen anderen Ordner genügend Unterschiede, denke ich, um eine separate Frage zu rechtfertigen. –

+0

Kopieren Sie einfach den Ordner ** venv ** aus dem Projekt. Fügen Sie es in den gewünschten Projektordner ein, in den Sie verschieben möchten. Wenn Sie GUI-Software wie pycharm benutzen (in ** Einstellungen -> Projekt-Interpreter -> local env hinzufügen ** geben Sie jetzt den Pfad zum verschobenen Ordner :-) –

Antwort

1

//, aber leider:

(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 
$ 

... drückt enter viel in Frustration und die folgenden Werke

$ 
$ 
$ pip3 search foaas 

Außer es nicht aus my-python-venv ist, ergo Traurigkeit.

Wollen Sie mv Ihre virtualenv und verwenden Sie es, sonst unverändert?

Kurze Antwort: Nun, ya kann nicht.

+0

es sei denn, du willst blutig werden und es passend modifizieren: Es sind die Links in den Binaries in der Bin, die das Bewegungsproblem verursachen. Wenn Sie wissen, woher Sie gekommen sind, können Sie etwas wie 'find bin -type f -exec ex -sc"% s, $ {FROM}, $ {PWD}, g | x "{} \; bin und lib befinden sich in Ihrem aktuellen venv-Ordner. Ich benutze dies als eine schnelle und schmutzige Möglichkeit, python3 virtuelle envs mit vielen installierten pip-Paketen zu kopieren und zu verschieben. –

3

Ja, das sollte möglich sein, wenn Sie nichts getan haben, was vom aktuellen Verzeichnis des virtualenv abhängt.

Wenn Sie jedoch die Wahl haben, ist es das Beste, ein neues virtualenv zu erstellen und stattdessen das neue virtualenv zu verwenden. Dies ist die sicherste Wahl und führt am seltensten zu späteren Problemen.

Die Dokumentation does mention that:

Jeder virtualenv Pfadinformationen in sie hartcodiert sind,

Zum Beispiel wird es, wenn Sie ausgeführt haben setvirtualenvproject dann nicht in der Lage sein, das wechseln richtiges Verzeichnis, nachdem Sie workon ... ausgeführt haben, in diesem Fall müssten Sie das manuell beheben.

Im Allgemeinen ist ein virtualenv wenig mehr als ein Verzeichnis mit den notwendigen Python-Interpreter-Dateien und Paketen, die Sie benötigen.

+1

//, Es scheint, als würde man es überall hin verschieben, auch wenn es ein frisches ist 'virtualenv' wie im obigen Beispiel, verwirrt mit den Pfadinformationen. Ich habe Mitleid mit den Narren, die versuchen, ihren 'virtualenv' irgendwo zu kopieren. Sie werden nicht den Vorteil eines unmittelbaren "schlechten Dolmetscher:" -Fehlers haben. "Interessante" Spielereien werden für sie folgen. –

4

Das Argument --relocatable zu virtualenv scheint Ihnen zu ermöglichen, dies zu tun.

+0

//, Wenn ich es zur Arbeit bringen kann, haben wir selbst die akzeptierte Antwort, meine Freunde. –

+0

//, Verlässt sich das nur auf relative Pfade, oder macht es irgendwie anders herum? –

+1

--relocatable funktioniert nur bestehende virtuelle Umgebungen. Führen Sie 'virtualenv --relocatable my-python-venv' aus, NACHDEM die Umgebung bereits existiert. – hilcharge

33

Ja. Es ist möglich, es auf der gleichen Plattform zu bewegen. Sie können --relocatable in einer vorhandenen Umgebung verwenden.

Von --help:

--relocatable - Machen Sie eine vorhandene virtualenv Umgebung relocatable. Dies behebt Skripte und macht alle. Pth-Dateien relativ.

JEDOCH dies scheint nicht der activate Skript zu ändern, und vielmehr ändert sich nur die pip* und easy_install* Skripten. In dem activate Skript ist die $VIRTUAL_ENV Umgebungsvariable wie das Original /path/to/original/venv fest codiert. Die $VIRTUAL_ENV Variable wird auch verwendet, um die PATH Ihrer aktiven Umgebung zu setzen, daher muss sie basierend auf der neuen Position geändert werden, um python und pip usw. ohne absoluten Pfad aufzurufen.

um dieses Problem zu beheben, können Sie die $VIRTUAL_ENV Umgebungsvariable in dem (Beispiel für sed verwenden) activate Skript ändern, und alles soll gut zu gehen.

Ein Beispiel für die Nutzung:

$ cd ~/first 
$ virtualenv my-venv 
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate 
VIRTUAL_ENV="/home/username/first/my-venv" 
$ virtualenv --relocatable my-venv 
Making script my-venv/bin/easy_install relative 
Making script my-venv/bin/easy_install-2.7 relative 
Making script my-venv/bin/pip relative 
Making script my-venv/bin/pip2 relative 
Making script my-venv/bin/pip2.7 relative 
### Note that `activate` has not been touched 
$ mkdir ~/second 
$ mv my-venv ~/second 
$ cd ~/second 
$ grep 'VIRTUAL_ENV=' my-venv/bin/activate 
VIRTUAL_ENV=/home/username/first/my-venv 
### (This variable hasn't been changed, it still refers to the old, now non-existent directory!) 
$ sed -i -e 's|username/first|username/second|' my-venv/bin/activate 
## sed can be used to change the path. 
## Note that the `-i` (in place) flag won't work on all machines. 
$ source my-venv/bin/activate 
(my-venv) $ pip install foass 
... 
(my-venv) $ python 
[...] 
> import foass 

Hurra, jetzt können Sie die Dinge installieren und in Ihre neu angeordnet virtuellen Umgebung laden.

+0

//, Testen jetzt. Ich habe meinen speziellen Anwendungsfall kompliziert. Ich habe es mit einer Menge plattformübergreifender Verrücktheit zu tun, wenn es also nicht für mich funktioniert, heißt das nicht, dass es eine schlechte Lösung ist. –

+0

//, Hm. Dies scheint jedoch nicht dazu geführt zu haben, dass diese verlagerbar sind. Ich bekomme immer wieder einen Fehler, weil sie nicht "normale" Skriptdateien sind. –

+0

Welche Skripte sind nicht 'normal'? Wenn ich mich erinnere, ändert das Skript virtual env activate meist nur Umgebungsvariablen. Aber wenn das Python innerhalb des virtualenv nicht auf der neuen Plattform läuft, dann ist es wahrscheinlich nicht virtuell env Problem, sein Problem des kompilierten Programms auf anderen Plattformen. Können Sie den normalen Python-Interpreter ausführen? Und welche Shell verwendest du? – hilcharge

Verwandte Themen