如何根据 "Base" 中的新安装更新 conda 的虚拟环境?

How to update virtual environment of conda based on new install in "Base"?

我是 运行 WSL2 上的 Ubuntu2.04。我已经使用 conda 安装了大部分软件包。

我使用 conda 创建了一个虚拟环境:“PipInConda_DKU”,这是 base 的副本。我安装了pip,然后我使用pip安装了open CV。

最近在环境(base)中安装了Pytorch。有没有一种简单的方法可以更新另一个“PipInConda_DKU”?

Conda CLI 没有专门的命令来执行此操作,但有一些简单的方法可以执行此操作。请注意,pip-已安装的软件包将不会被重复使用。最好的办法就是限制在同一版本。

离线安装

非特定

最简单的方法可能就是在安装命令中添加 --offline 标志:

conda install -n PipInConda_DKU --offline pytorch

并且如果所有其他软件包都与 base 中的软件包相匹配,Conda 很可能会解析为与您安装到 base 的 pytorch 相同的版本.

具体

但是,这并不能保证。为了更加严格并匹配 base 中的确切包,您应该从 base 中获取该信息,然后在安装时使用它来指定包构建。

例如,我的 base 中有包 git,假设我想在不同的环境中构建相同的构建,foo。我会用

$ conda list -en base '^git$'
# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: osx-64
git=2.29.1=pl5262h1f02409_0

获取信息,然后

conda install -n foo --offline git=2.29.1=pl5262h1f02409_0

或者,作为单行,有多个包裹(pkg1pkg2):

conda install -n foo --offline $(conda list -en base '^(pkg1|pkg2)$' | awk '[=13=] !~ /^#/')

通过 YAML 更新

另一种选择是将源环境转储到 YAML,然后使用 YAML 更新目标。例如,假设 foobar 分别是我们的源环境和目标环境,那么

conda env export -n foo > foo.yaml
conda env update -n bar -f foo.yaml

会将 foo 中的所有内容安装到 bar.

警告conda env update 命令将改变环境,而不提示用户查看更改。