如何重命名 conda 环境?
How can I rename a conda environment?
我有一个名为 old_name
的 conda 环境,如何在不破坏引用的情况下将其名称更改为 new_name
?
你不能。
一种解决方法是 create clone a new environment and then remove 原始方法。
首先,记得停用您当前的环境。您可以使用以下命令执行此操作:
deactivate
在 Windows 或
source deactivate
macOS/Linux。
然后:
conda create --name new_name --clone old_name
conda remove --name old_name --all # or its alias: `conda env remove --name old_name`
注意此方法有几个缺点:
- 它会重新下载包(您可以使用
--offline
标志来禁用它)
- 复制环境文件耗时
- 临时双倍磁盘使用
有一个开放的 issue 请求此功能。
根据 的有用评论,我能够在 Bash 一行中完成此操作:
conda create --name envpython2 --file <(conda list -n env1 -e )
我命名错误的环境是 "env1",我想从中克隆的新环境是 "envpython2"。
conda create --name new_name --copy --clone old_name
更好
我使用 conda create --name new_name --clone old_name
没有 --copy
但是遇到点中断...
以下url可能有帮助
conda 应该给我们一个像 cond env rename <old> <new>
这样的简单工具,但它没有。简单地重命名目录,如 this previous answer,当然会破坏硬编码的 hashbangs (#!)。
因此,我们需要更深入地实现我们想要的。
conda env list
# conda environments:
#
base * /home/tgowda/miniconda3
junkdetect /home/tgowda/miniconda3/envs/junkdetect
rtg /home/tgowda/miniconda3/envs/rtg
我在这里尝试重命名 rtg
--> unsup
(请忍受这些名称,这是我的真实用例)
$ 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
the previous answer 报告了这个,但是 等等,我们还没有完成!
悬而未决的任务是,$NEW/bin
dir 有一堆带有 hashbangs (#!
) 的可执行脚本指向 $OLD env 路径。
参见jupyter
,例如:
$ 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
因此,我们可以使用 sed
轻松修复它
$ 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
现在我们完成了
我认为编写一个可移植脚本来完成所有这些并将其绑定到 conda env rename old new
.
应该是微不足道的
我在 ubuntu 上测试过这个。无论出于何种不可预见的原因,如果出现问题并且您希望恢复上述更改:
$ mv $NEW $OLD
$ sed -i.bak "s:envs/$NEW/bin:envs/$OLD/bin:" $OLD/bin/*
您只需重命名 env 文件夹即可重命名您的 Conda 环境。
证明如下:
您可以在 C:\ProgramData\Anaconda3\envs
中找到您的 Conda env 文件夹,或者您可以输入 conda env list
查看 conda envs 列表及其位置。
我在 Windows 上使用 Conda,但 对我不起作用。但我可以建议另一种解决方案:
重命名环境文件夹(old_name
至 new_name
)
打开 shell 并使用自定义文件夹激活环境:
conda.bat activate "C:\Users\USER_NAME\Miniconda3\envs\new_name"
现在您可以使用此环境,但它不在环境列表中。 Update\install\remove 修复它的任何软件包。例如,更新 numpy:
conda update numpy
对包应用任何操作后,环境将显示在环境列表中。要检查这一点,请键入:
conda env list
@pkowalczyk 的回答提到了一些缺点:在我看来,无痛且有风险-免费(解决方法) 方法是按照以下步骤操作:
- 激活并导出您当前的环境
conda env export > environment.yml
- 停用当前的 conda 环境。修改
environment.yml
文件并根据需要更改环境名称(通常在 yaml
文件的第一行)
- 通过执行此
conda env create -f environment.yml
创建一个新的 conda 环境
这个过程需要几分钟,现在您可以安全地删除旧环境了。
P.S。将近 5 年了,conda 仍然没有它的“重命名”功能。
根据 Thamme Gowda 的回答,以下步骤适用于我的 MacBook Pro:
- 将旧环境名称的文件夹名称更改为新环境名称。
- 将bin文件夹下所有常规文件的shebang行中的旧env名称全部替换到新的env文件夹中。
命令是:
$ 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
检查 shebang 行是否正确替换:
$ head -1 $(which jupyter)
#!/Users/my_username/anaconda3/envs/new_name/bin/python
我有一个名为 old_name
的 conda 环境,如何在不破坏引用的情况下将其名称更改为 new_name
?
你不能。
一种解决方法是 create clone a new environment and then remove 原始方法。
首先,记得停用您当前的环境。您可以使用以下命令执行此操作:
deactivate
在 Windows 或source deactivate
macOS/Linux。
然后:
conda create --name new_name --clone old_name
conda remove --name old_name --all # or its alias: `conda env remove --name old_name`
注意此方法有几个缺点:
- 它会重新下载包(您可以使用
--offline
标志来禁用它) - 复制环境文件耗时
- 临时双倍磁盘使用
有一个开放的 issue 请求此功能。
根据
conda create --name envpython2 --file <(conda list -n env1 -e )
我命名错误的环境是 "env1",我想从中克隆的新环境是 "envpython2"。
conda create --name new_name --copy --clone old_name
更好
我使用 conda create --name new_name --clone old_name
没有 --copy
但是遇到点中断...
以下url可能有帮助
conda 应该给我们一个像 cond env rename <old> <new>
这样的简单工具,但它没有。简单地重命名目录,如 this previous answer,当然会破坏硬编码的 hashbangs (#!)。
因此,我们需要更深入地实现我们想要的。
conda env list
# conda environments:
#
base * /home/tgowda/miniconda3
junkdetect /home/tgowda/miniconda3/envs/junkdetect
rtg /home/tgowda/miniconda3/envs/rtg
我在这里尝试重命名 rtg
--> unsup
(请忍受这些名称,这是我的真实用例)
$ 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
the previous answer 报告了这个,但是 等等,我们还没有完成!
悬而未决的任务是,$NEW/bin
dir 有一堆带有 hashbangs (#!
) 的可执行脚本指向 $OLD env 路径。
参见jupyter
,例如:
$ 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
因此,我们可以使用 sed
轻松修复它$ 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
现在我们完成了
我认为编写一个可移植脚本来完成所有这些并将其绑定到 conda env rename old new
.
我在 ubuntu 上测试过这个。无论出于何种不可预见的原因,如果出现问题并且您希望恢复上述更改:
$ mv $NEW $OLD
$ sed -i.bak "s:envs/$NEW/bin:envs/$OLD/bin:" $OLD/bin/*
您只需重命名 env 文件夹即可重命名您的 Conda 环境。 证明如下:
您可以在 C:\ProgramData\Anaconda3\envs
中找到您的 Conda env 文件夹,或者您可以输入 conda env list
查看 conda envs 列表及其位置。
我在 Windows 上使用 Conda,但
重命名环境文件夹(
old_name
至new_name
)打开 shell 并使用自定义文件夹激活环境:
conda.bat activate "C:\Users\USER_NAME\Miniconda3\envs\new_name"
现在您可以使用此环境,但它不在环境列表中。 Update\install\remove 修复它的任何软件包。例如,更新 numpy:
conda update numpy
对包应用任何操作后,环境将显示在环境列表中。要检查这一点,请键入:
conda env list
@pkowalczyk 的回答提到了一些缺点:在我看来,无痛且有风险-免费(解决方法) 方法是按照以下步骤操作:
- 激活并导出您当前的环境
conda env export > environment.yml
- 停用当前的 conda 环境。修改
environment.yml
文件并根据需要更改环境名称(通常在yaml
文件的第一行) - 通过执行此
conda env create -f environment.yml
创建一个新的 conda 环境
这个过程需要几分钟,现在您可以安全地删除旧环境了。
P.S。将近 5 年了,conda 仍然没有它的“重命名”功能。
根据 Thamme Gowda 的回答,以下步骤适用于我的 MacBook Pro:
- 将旧环境名称的文件夹名称更改为新环境名称。
- 将bin文件夹下所有常规文件的shebang行中的旧env名称全部替换到新的env文件夹中。
命令是:
$ 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
检查 shebang 行是否正确替换:
$ head -1 $(which jupyter)
#!/Users/my_username/anaconda3/envs/new_name/bin/python