【问题标题】:How to update virtual environment of conda based on new install in "Base"?如何根据“Base”中的新安装更新 conda 的虚拟环境?
【发布时间】:2023-03-26 02:17:01
【问题描述】:

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

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

最近,我在环境(基础)中安装了 Pytorch。有没有一种简单的方法可以更新其他“PipInConda_DKU”?

【问题讨论】:

    标签: ubuntu conda windows-subsystem-for-linux


    【解决方案1】:

    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 '$0 !~ /^#/')
    

    通过 YAML 更新

    另一种选择,如果一个人只是想从一个环境到另一个环境中的所有内容,则将源环境转储到 YAML,然后使用 YAML 更新目标。例如,假设 foobar 分别是我们的源环境和目标环境,那么

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

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

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

    【讨论】:

    • 谢谢。我使用“通过 YAML 更新”并且它有效。非常感谢这个详细的答案。我是 Ubuntu 新手,因此理解有限。所以,我有一个困惑。当我按照“通过 YAML 更新”中的描述进行更新时,是重新安装所有包还是只是一个指向同一组包的配置文件?
    • 另外,如果您能指点我一些阅读材料以了解有关 conda 虚拟环境和 YAML 的更多信息,我将不胜感激
    • @GarimaSingh YAML 包含在 "Managing Environments" section of the documentation 中。至于重新安装:不,如果已经安装了相同的包版本,它将不会重新安装。
    猜你喜欢
    • 2021-05-16
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多