Diese Frage ist kein Duplikat.
Es bezieht sich nicht nur auf das Umbenennen einer virtuellen Umgebung, sondern tatsächlich bewegt es in ein anderes Verzeichnis, darunter möglicherweise auch eines anderen Benutzers zu Verzeichnis.
Dies ist nicht dasselbe wie das bloße Umbenennen einer virtuellen Umgebung, insbesondere für Personen, die mit virtuellen Umgebungen nicht vertraut sind.
Wenn ich eine virtuelle Umgebung erstelle und sie in einen anderen Ordner verschiebe, funktioniert sie dann noch?
$ 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 bewegte sich die virtuelle Umgebung ...
(my-python-venv) $ deactivate
$ mkdir -p /home/me/PeskyPartyPEnvs
$ mv /home/me/Env/my-python-venv /home/me/PeskyPartyPEnvs/
Frage:
Ob das funktioniert?
$ source /home/me/PeskyPartyPEnvs/my-python-venv/bin/activate
(my-python-venv) $ /home/me/PeskyPartyPEnvs/my-python-venv/bin/pip3 install foaas
Ich meine dies weniger als eine Frage der Weisheit, dies zu versuchen (es sei denn, diese Weisheit ist natürlich humorvoll), als vielmehr, ob es möglich ist. Ich möchte wirklich wissen, ob dies in Python 3 möglich ist oder ob ich es nur aufsaugen und klonen muss.
Kann ich nur mv
eine virtualenv
ohne Traurigkeit , dass wie? Ich möchte Traurigkeit vermeiden.
quelle
Scripts
(entsprichtbin
on * nix) und sagt so etwas wie imactivate.ps1 cannot be made relative (it's not a normal script that starts with #!c:\..python.exe.
Grunde, dass es sich über den Hash-Bang in der Datei beschwert Der Header ist nicht die python.exe der aktuellen virtualenv, sondern die, aus der ich ihn von -easy fixed verschoben habe. Ich habe in diesem noblen Drehbuch nachgesehen und es entdeckt sowieso schon seinen eigenen Weg - schön. Einige der anderen Skripte basieren auch nicht auf Pfaden (z. B. disable.bat). Kurz gesagt, dies funktioniert.activate.ps1 cannot be made relative
kann ignoriert werden, da dieses Skript bereits relativ ist. Die Nachricht ist unter Windows nicht hilfreich, da Skripte keine#!
Anweisungen wie unter Linux verwenden, um der Shell mitzuteilen, welche Anwendung sie ausführen soll. Dasactivate.bat
wird nicht geändert, aber es wird nicht verwendet (zumindest unter Windows 10activate
startet der Aufruf das PoSH-Skript), also nein, ich musste keine Skripte bearbeiten. Das Problem istpip.exe
, dass der Pfad zu Python fest codiert ist und mit einem Hex-Editor oder nur einer Neuinstallation bearbeitet werden muss.pip freeze
einer Anforderungsdatei problemlos neu erstellt werden können, damit Sie alle Ihre Pakete, Docker (funktioniert gut mit darauf installierten virtualenv), conda, pyenv oder anderen Tools problemlos neu installieren können. Sie sollten in der Lage sein, Umgebungen als unveränderliche Infrastruktur zu erstellen und zu zerstören. Sie sollten nicht wertvoll sein.Für Python 3.3+ (mit neuem
venv
integrierten Modul)Kurze Antwort (unabhängig von der Version):
Lange Antwort:
Ab Python v3.3 wurde
virtualenv
ein integriertes Modul mit dem Namenvenv
.Die
--relocatable
in anderen Antworten erwähnte Option wurde nicht berücksichtigtvenv
, und derzeit gibt es keine gute und sichere Möglichkeit, eine virtuelle Python-Umgebung umzubenennen oder zu verschieben.Es gibt jedoch eine ziemlich einfache Möglichkeit, eine virtuelle Umgebung mit all ihren aktuell installierten Paketen einfach neu zu erstellen. Informationen zum Wiederherstellen einer virtuellen Umgebung finden Sie in dieser Antwort oder im folgenden Abschnitt. Während des Vorgangs können Sie die neue Umgebung an einem beliebigen Ort und mit einem beliebigen Namen neu erstellen. Oder lesen Sie den folgenden Abschnitt für den Vorgang.
In dieser Antwort erwähnt er einige andere Pakete von Drittanbietern, die direkte Umbenennungen oder Verschiebungen unterstützen können. Wenn Sie sich dazu entschließen, eine virtuelle Umgebung intakt zu halten, können Sie prüfen, ob diese auch funktionieren
venv
.Hinweis: In dieser Antwort wird
virtualenv
eher auf als auf konzentriertvenv
. Weiter unten erfahren Sie, wie Sie übersetzen.venv
älterevirtualenv
BefehlssyntaxDer zu verwendende Befehl
venv
lautet:anstatt nur
virtualenv
, was als Befehl im Originalpaket installiert wird. Wobei sich "Python" darauf bezieht, wie auch immer Sie Ihre ausführbare Python-Datei ausführen. Dies kann eine Vielzahl von Dingen sein, wie zum Beispiel:python
py
oderpy -3.7
ähnlich (der Python Launcher für Windows für Python 3.3+ und Windows derzeit nur)python3
(Konvention für Linux-Umgebungen, in denen Python 2 und 3 doppelt installiert werden)c:\program files\python37\python.exe
Wenn Sie sich nicht sicher sind, welche Version ausgeführt wird, können Sie dies jederzeit
python --version
herausfinden.So erstellen Sie eine virtuelle Umgebung neu
Das Erstellen / Neuerstellen einer virtuellen Umgebung ist einfach und sollte zur zweiten Natur werden, nachdem Sie ein wenig mit ihnen gearbeitet haben. Dieser Prozess spiegelt wider, was Sie tun würden, um Ihr Skript als Paket (mit seinen Abhängigkeiten) in der ersten Hälfte zu verteilen, und was dann jemand tun würde, um Ihr Skript / Paket für die weitere Entwicklung zu installieren.
Holen Sie sich zunächst eine aktualisierte Liste der Inhalte in der virtuellen Umgebung. Wenn es aktiv ist, rufen Sie die verwendete Python-Version ab und speichern Sie die Liste der Abhängigkeiten in einer Datei.
Verwenden Sie diese Option
python --version
bei aktivierter virtueller Umgebung, um zu sehen, welche Python-Version verwendet wird.Verwenden Sie
python -m pip freeze > requirements.txt
diese Option , um die Liste der aktuellen Paketabhängigkeiten zu erstellen und in dierequirements.txt
Datei einzufügen. Dieser Befehl funktioniert sicher unter Linux oder Git Bash - nicht 100% sicher über Powershell oder Command Line unter Windows.Erstellen Sie nun eine neue virtuelle Umgebung und fügen Sie die Abhängigkeiten von der alten hinzu.
Mach dein neues Venv.
python
als Befehlpython.exe
im Ordner für die virtuelle Umgebungpython -m venv my_new_venv
diese Option , um eine neue virtuelle Umgebung im aktuellen Arbeitsverzeichnis in einem neuenmy_new_venv
Ordner zu erstellen .Installieren Sie Ihre Abhängigkeiten aus der
requirements.txt
Datei.python -m pip install -r requirements.txt
Möglicherweise müssen Sie lokale Pakete neu installieren, die sich im Entwicklungsmodus befinden.
Hinweis: Wenn Sie jemals den Speicherort anzeigen müssen, an dem ein Paket installiert ist, verwenden Sie:
python -m pip list -v
-v
Option oder "ausführlich" werden einige zusätzliche Informationen zu jedem installierten Paket hinzugefügt, einschließlich des Pfads, in dem es installiert ist. Dies ist nützlich, um sicherzustellen, dass virtuelle, Benutzer- und Systeminstallationspakete gerade bleiben.An dieser Stelle können Sie einfach den alten venv-Ordner und alle Inhalte löschen. Ich empfehle, dafür eine grafische Benutzeroberfläche zu verwenden. Das Löschen von Dateien über die Linux-Befehlszeile ist häufig dauerhaft, und ein kleiner Tippfehler kann eine schlechte Nachricht sein.
quelle
pip wheel . -w wheels
und dann die Pakete in der neuen virtuellen Umgebung mitpip install --no-index --find-links /path/to/wheels/ -r requirements.txt
Das
--relocatable
Argument tovirtualenv
scheint dies zu ermöglichen.quelle
virtualenv --relocatable my-python-venv
NACH der bereits vorhandenen Umgebung aus.--help
:This fixes up scripts and makes all .pth files relative
. Nein, es werden keine plattformunabhängigen Bibliotheken erstellt. Wenn Sie es auf eine andere Plattform verschieben möchten, müssen Sie es basierend auf der lokalen Python neu installieren.ABER ALAS:
Nein, das kannst du nicht einfach
mv
. Es gibt Problemumgehungen, die Neuinstallation ist jedoch möglicherweise einfacher.(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 frustriert und das Folgende funktioniertAußer es ist nicht von
my-python-venv
, ergo Traurigkeit.Willst
mv
du deinvirtualenv
und benutzt es, sonst unverändert?Kurze Antwort:
Nun, du kannst nicht .
quelle
find bin -type f -exec ex -sc "%s,${FROM},${PWD},g|x" {} \;
annehmen, dass sich Ihr bin und lib in Ihrem aktuellen venv-Ordner befinden. Ich benutze dies als eine schnelle und schmutzige Methode, um virtuelle Python3-Envs mit vielen installierten Pip-Paketen zu kopieren und zu verschieben.--relocatable
? Auch Nathan, tolle Frage, aber das ist eine schreckliche Antwort. Das Akzeptieren Ihrer eigenen Antwort ist immer ein wenig voreingenommen, es sei denn, es ist gut geschrieben und listet die Optionen klar auf, aber zu bestimmen, dass Sie trotzdem subjektiv wären.mv
ein Venv?" Und die Antwort lautet "Nein, Sie können nicht einfachmv
, es gibt Problemumgehungen, aber die Neuinstallation ist möglicherweise einfacher". Wenn dies die beste Antwort wäre, würde es mir und anderen Zeit sparen.Ja, dies sollte möglich sein, wenn Sie nichts getan haben, was vom aktuellen Verzeichnis der virtuellen Umgebung abhängt.
Wenn Sie jedoch die Wahl haben, ist es am besten, eine neue virtuelle Umgebung zu erstellen und stattdessen die neue virtuelle Umgebung zu verwenden. Dies ist die sicherste Wahl und führt am wenigsten später zu Problemen.
In der Dokumentation wird Folgendes erwähnt :
Wenn Sie beispielsweise ausgeführt haben, kann es nach der Ausführung
setvirtualenvproject
nicht in das richtige Verzeichnis wechseln.workon ...
In diesem Fall müssen Sie dies manuell beheben.Im Allgemeinen ist eine virtuelle Umgebung kaum mehr als ein Verzeichnis mit den erforderlichen Python-Interpreterdateien und den benötigten Paketen.
quelle
Unter Verwendung der Antworten dieses und anderer Threads zu ähnlichen Themen habe ich ein Bash-Skript erstellt, das sich im Verzeichnis virtualenv befindet und ausgeführt wird und bei Ihren Bewegungen von virtualenv hilft.
Danach müssen
virtualenv --relocatable yourenv
Sie IhreVIRTUAL_ENV
Variable jedes Mal ändern , wenn Sie das Verzeichnis verschieben. Wenn Sie sie also nicht manuell ändern möchten, verwenden Sie diese Option.#!/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
Ich hoffe, es hilft.
quelle
JA, DU KANNST! (In
windows
)Die Abhilfe ist einfach, nur Ihre virtuelle Umgebung bewegt überall dann bearbeiten
activate.bat
innenscripts\
:Wechseln Sie in die virtuelle Umgebung in das gewünschte Verzeichnis
Klicken Sie mit der rechten Maustaste und bearbeiten Sie
activate.bat
untervenv_folder\scripts
.VIRTUAL_ENV
Variable ändern von:in
Speichern Sie die bearbeitete Batch-Datei und fertig!
HINWEIS: Meine Lösung sollte funktionieren und das
windows users
Einrichten neuer virtueller Umgebungen speichern. Ich bezweifle, dass dies unter anderen Betriebssystemen funktioniert, da.bat
es von stammtMS-DOS
quelle
old_directory
zuold_directory
- ist das ein Tippfehler?