Wie kann ich eine Conda-Umgebung umbenennen?

Lesezeit: 8 Minuten

Benutzer-Avatar
pkowalczyk

Ich habe eine Conda-Umgebung mit dem Namen old_namewie kann ich den Namen ändern in new_name ohne Referenzen zu brechen?

  • 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


Benutzer-Avatar
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 bzw
  • source 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:

  1. Es lädt Pakete erneut herunter (Sie können --offline Flagge, um es zu deaktivieren)
  2. Zeitaufwand für das Kopieren der Dateien der Umgebung
  3. 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 laufen pytest 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


Benutzer-Avatar
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 jupyterzum 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/*

Benutzer-Avatar
Lang

Als Antwort von @pkowalczyk erwähnt einige Nachteile: Meiner bescheidenen Meinung nach, die schmerzlos und risikofrei (Workaround) Way folgt stattdessen diesen Schritten:

  1. Aktivieren und exportieren Sie Ihre aktuelle Umgebung conda env export > environment.yml
  2. 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 der yaml Datei)
  3. 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 .ymlnicht .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

Benutzer-Avatar
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 zu new_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 .ymlnicht .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

Benutzer-Avatar
Sam Tseng

Laut der Antwort von Thamme Gowda funktionieren die folgenden Schritte für mich auf meinem MacBook Pro:

  1. Ändern Sie den Ordnernamen des alten Umgebungsnamens in einen neuen Umgebungsnamen.
  2. 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

1113970cookie-checkWie kann ich eine Conda-Umgebung umbenennen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy