Ich habe eine Conda-Umgebung mit dem Namen old_name
wie kann ich den Namen ändern in new_name
ohne Referenzen zu brechen?
Wie kann ich eine Conda-Umgebung umbenennen?
pkowalczyk
pkowalczyk
Neue Antwort:
Aus Konda 4.14 Sie können nur verwenden:
conda rename -n old_name -d new_name
Obwohl unter der Haube conda rename
verwendet noch [1][2] unten genannte Kombination von conda create
und conda remove
.
Alte Antwort:
Du kannst nicht.
Eine Problemumgehung besteht darin, schaffen klonen Sie eine neue Umgebung und dann Löschen das Original.
Denken Sie zunächst daran, Ihre aktuelle Umgebung zu deaktivieren. Sie können dies mit den Befehlen tun:
deactivate
unter Windows bzwsource deactivate
unter macOS/Linux.
Dann:
conda create --name new_name --clone old_name
conda remove --name old_name --all # or its alias: `conda env remove --name old_name`
Beachten Sie, dass diese Methode mehrere Nachteile hat:
- Es lädt Pakete erneut herunter (Sie können
--offline
Flagge, um es zu deaktivieren) - Zeitaufwand für das Kopieren der Dateien der Umgebung
- Temporäre doppelte Festplattennutzung
Es gibt eine offene Ausgabe diese Funktion anfordern.
-
Booooo warum kann man eine conda env nicht umbenennen?
– Charly Parker
15. Juni 2017 um 18:10 Uhr
-
um denen, die Conda forken, etwas Arbeit zu überlassen und sie dadurch unterwegs viel besser verstehen zu lassen 😛 😀
– Saravanabalagi Ramachandran
3. Juli 2017 um 6:40 Uhr
-
Eine andere Möglichkeit besteht darin, die Umgebung zu klonen
conda create --name new_name --clone old_name
dann kannst du die alte entfernen.– Tupu
22. November 2017 um 14:01 Uhr
-
Ein Wort der Warnung – ich habe dies versucht und bin auf bizarre Fehler gestoßen – my
.bashrc
funktionierte nicht mehr und versuchte zu laufenpytest
würde fehlschlagen und versuchen, auf die jetzt entfernte Umgebung zu verweisen. Ich habe neue Shells ausprobiert und ohne Glück neu gestartet. Am Ende musste ich die neue Umgebung wegblasen und dann einfach mit einer Neuinstallation beginnen. Langsamer, aber scheint jetzt tatsächlich zu funktionieren.– Dwanderson
27. Februar 2018 um 18:09 Uhr
-
@dwanderson +5000, da ich versuchen wollte, diese Antwort zu verwenden, aber stattdessen werde ich einfach das Pflaster abziehen und meine schlecht benannte Umgebung von Grund auf neu erstellen.
– bgoodr
2. Februar 2019 um 20:44 Uhr
conda create --name new_name --copy --clone old_name
ist besser
ich benutze conda create --name new_name --clone old_name
was ohne ist --copy
aber auf Pip Breaks gestoßen …
Die folgende URL kann hilfreich sein. Die Installation von Tensorflow in einer geklonten Conda-Umgebung unterbricht die Conda-Umgebung, aus der sie geklont wurde
-
mvenv () {conda create –name $2 –copy –clone $1 ; conda entfernen –name $1 –all ;}
– Benutzer3673
20. September 2020 um 4:32 Uhr
-
(Setzen Sie das an das Ende von ~/.bashrc und Sie haben anscheinend die angeforderte Funktion. Sie können es gerne in Ihre Antwort aufnehmen, da ich mir Ihre Lösung mit –clone und –copy nicht vorstellen konnte.)
– Benutzer3673
20. September 2020 um 4:34 Uhr
bgoodr
Basierend auf Dwandersons hilfreichem Kommentar konnte ich dies in einem Bash-Einzeiler tun:
conda create --name envpython2 --file <(conda list -n env1 -e )
Meine schlecht benannte env war “env1” und die neue, die ich daraus klonen möchte, ist “envpython2”.
-
Auf eine Fehlermeldung gestoßen
PackagesNotFoundError: The following packages are not available from current channels
mit diesem Skript. Dieses Skript funktioniert wahrscheinlich nur, wenn Sie keine Pakete haben, die mit pip installiert wurden und die in conda in der vorhandenen Umgebung nicht verfügbar sind?– Ethan Chen
2. April 2020 um 16:42 Uhr
conda hätte uns ein einfaches Tool wie geben sollen cond env rename <old> <new>
aber das hat es nicht. Das einfache Umbenennen des Verzeichnisses, wie in dieser vorherigen Antwort, bricht natürlich die hartcodierten Hashbangs (#!). Daher müssen wir noch eine Ebene tiefer gehen, um das zu erreichen, was wir wollen.
conda env list
# conda environments:
#
base * /home/tgowda/miniconda3
junkdetect /home/tgowda/miniconda3/envs/junkdetect
rtg /home/tgowda/miniconda3/envs/rtg
Hier versuche ich umzubenennen rtg
–> unsup
(Bitte ertragen Sie diese Namen, dies ist mein echter Anwendungsfall)
$ cd /home/tgowda/miniconda3/envs
$ OLD=rtg
$ NEW=unsup
$ mv $OLD $NEW # rename dir
$ conda env list
# conda environments:
#
base * /home/tgowda/miniconda3
junkdetect /home/tgowda/miniconda3/envs/junkdetect
unsup /home/tgowda/miniconda3/envs/unsup
$ conda activate $NEW
$ which python
/home/tgowda/miniconda3/envs/unsup/bin/python
die vorherige Antwort berichtete bis dahin, aber warte, wir sind noch nicht fertig!
die anstehende Aufgabe ist, $NEW/bin
dir enthält eine Reihe ausführbarer Skripte mit Hashbangs (#!
), die auf die $OLD-Env-Pfade zeigen.
Sehen jupyter
zum Beispiel:
$ which jupyter
/home/tgowda/miniconda3/envs/unsup/bin/jupyter
$ head -1 $(which jupyter) # its hashbang is still looking at old
#!/home/tgowda/miniconda3/envs/rtg/bin/python
Wir können es also leicht mit einem sed beheben
$ sed -i.bak "s:envs/$OLD/bin:envs/$NEW/bin:" $NEW/bin/*
# `-i.bak` created backups, to be safe
$ head -1 $(which jupyter) # check if updated
#!/home/tgowda/miniconda3/envs/unsup/bin/python
$ jupyter --version # check if it works
jupyter core : 4.6.3
jupyter-notebook : 6.0.3
$ rm $NEW/bin/*.bak # remove backups
Jetzt sind wir fertig 💯
Ich denke, es sollte trivial sein, ein portables Skript zu schreiben, um all das zu tun und es daran zu binden conda env rename old new
.
Ich habe das auf Ubuntu getestet. Wenn aus unvorhersehbaren Gründen etwas kaputt geht und Sie die oben genannten Änderungen rückgängig machen möchten:
$ mv $NEW $OLD
$ sed -i.bak "s:envs/$NEW/bin:envs/$OLD/bin:" $OLD/bin/*
Lang
Als Antwort von @pkowalczyk erwähnt einige Nachteile: Meiner bescheidenen Meinung nach, die schmerzlos und risikofrei (Workaround) Way folgt stattdessen diesen Schritten:
- Aktivieren und exportieren Sie Ihre aktuelle Umgebung
conda env export > environment.yml
- Aktuelle Conda-Umgebung deaktivieren. Modifiziere den
environment.yml
Datei und ändern Sie den Namen der Umgebung nach Belieben (normalerweise steht er in der ersten Zeile deryaml
Datei) - Erstellen Sie eine neue Conda-Umgebung, indem Sie dies ausführen
conda env create -f environment.yml
Dieser Vorgang dauert einige Minuten, und jetzt können Sie die alte Umgebung sicher löschen.
PS fast 5 Jahre und Conda hat immer noch nicht seine “Umbenennungs” -Funktionalität.
-
Ich mag diese Antwort und bin gerade dabei, sie auszuführen. Ich glaube aber, dass die
prefix: ...
Zeile sollte auch auf den neuen Namen geändert werden, damit der env-Ordner nicht wiederverwendet wird …?– Steve Henty
4. April um 0:04
-
** UPDATE ** – Das Ändern des Präfixes in environment.yml wurde NICHT berücksichtigt. Aber das hinzufügen
-p
Option funktionierte gut:conda env create -f environment.yml -p /path/to/env
– Steve Henty
4. April um 2:56
-
Sie müssen nichts ändern, sondern liefern
--name
beim Schaffen einer neuen Umgebung. Beachten Sie, dass Ihre Umgebungsdatei mit enden sollte.yml
nicht.txt
.– Lang
14. April um 7:07 Uhr
-
Stellen Sie sicher, dass Sie sowohl die erste Zeile (
name: <new name>
) und die letzte Zeile (prefix: /dir1/dir2/../dirn/<new name>
).– Ottpocket
17. Juni um 14:50 Uhr
Chidozie Nnachor
Ich verwende Conda unter Windows und diese Antwort hat bei mir nicht funktioniert. Ich kann aber eine andere Lösung vorschlagen:
-
Umgebungsordner umbenennen (
old_name
zunew_name
) -
Öffnen Sie die Shell und aktivieren Sie env mit dem benutzerdefinierten Ordner:
conda.bat activate "C:\Users\USER_NAME\Miniconda3\envs\new_name"
-
Jetzt können Sie diese Umgebung verwenden, aber sie ist nicht auf der Umgebungsliste. Aktualisieren/installieren/entfernen Sie jedes Paket, um es zu reparieren. Aktualisieren Sie beispielsweise numpy:
conda update numpy
-
Nachdem Sie eine Aktion auf das Paket angewendet haben, wird die Umgebung in der Env-Liste angezeigt. Geben Sie Folgendes ein, um dies zu überprüfen:
conda env list
-
Ich mag diese Antwort und bin gerade dabei, sie auszuführen. Ich glaube aber, dass die
prefix: ...
Zeile sollte auch auf den neuen Namen geändert werden, damit der env-Ordner nicht wiederverwendet wird …?– Steve Henty
4. April um 0:04
-
** UPDATE ** – Das Ändern des Präfixes in environment.yml wurde NICHT berücksichtigt. Aber das hinzufügen
-p
Option funktionierte gut:conda env create -f environment.yml -p /path/to/env
– Steve Henty
4. April um 2:56
-
Sie müssen nichts ändern, sondern liefern
--name
beim Schaffen einer neuen Umgebung. Beachten Sie, dass Ihre Umgebungsdatei mit enden sollte.yml
nicht.txt
.– Lang
14. April um 7:07 Uhr
-
Stellen Sie sicher, dass Sie sowohl die erste Zeile (
name: <new name>
) und die letzte Zeile (prefix: /dir1/dir2/../dirn/<new name>
).– Ottpocket
17. Juni um 14:50 Uhr
Sam Tseng
Laut der Antwort von Thamme Gowda funktionieren die folgenden Schritte für mich auf meinem MacBook Pro:
- Ändern Sie den Ordnernamen des alten Umgebungsnamens in einen neuen Umgebungsnamen.
- Ersetzen Sie alle alten Env-Namen in den Shebang-Zeilen aller regulären Dateien unter dem Bin-Ordner im neuen Env-Ordner.
Die Befehle sind:
$ conda deactivate
$ OLD=old_name
$ NEW=new_name
$ cd /Users/my_username/anaconda3/envs/
$ mv $OLD $NEW
$ find $NEW/bin/* -maxdepth 1 -type f -exec sed -i.bak "s:envs/$OLD/bin:envs/$NEW/bin:" {} \;
$ conda activate new_name
Überprüfen Sie, ob die Shebang-Linie korrekt ersetzt wurde:
$ head -1 $(which jupyter)
#!/Users/my_username/anaconda3/envs/new_name/bin/python
Siehe auch diesen Beitrag zum Klonen einer Conda-Umgebung
– pylang
22. November 2019 um 16:43 Uhr
Sie können nicht umbenennen (frustrierend!), aber Sie können die alte Umgebung mit dem neuen Namen klonen und die alte Umgebung löschen:
conda create --name new_name --clone old_name
dann alte löschen:conda remove --name old_name --all
– Charly Parker
28. September 2020 um 20:00 Uhr