【问题标题】:Can a new env in conda inherit specific packages from base environmentconda 中的新环境可以从基础环境继承特定的包吗
【发布时间】:2020-10-07 21:52:30
【问题描述】:

当我为使用 pytorch 的项目创建 conda 环境时, 由于我所在地区的连接速度较慢(有时需要数小时),安装 torch 和 torchvision 软件包需要一些时间。

因此,为了快速开始我的项目,我不会创建新的环境,我只是使用基础环境中的包。我知道这很快就会变得毛茸茸的。

这就是为什么我想知道是否有一种方法可以使新创建的环境从基础环境中继承特定的包而无需重新安装。

ps:我知道 conda 使用硬链接,但我不明白在这种情况下如何使用它。感谢您的帮助。

【问题讨论】:

    标签: python anaconda conda miniconda


    【解决方案1】:

    克隆

    在新环境中仅使用已安装包的最简单方法是克隆现有环境 (conda create --clone foo --name bar)。一般来说,我不建议克隆 base 环境,因为它包含 Conda 和其他仅在 base 中需要的基础设施。

    在工作流级别,考虑创建一些可以为不同项目克隆的模板环境可能是有利的。

    YAML 定义

    但是,OP 提到只需要特定的包。我仍然会为此创建一个新的环境,但从使用导出的 YAML 的现有环境开始。

    conda env export -n foo > bar.yaml
    

    编辑bar.yaml 以删除您不想要的任何软件包(同样,如果是foo == base,请删除conda),然后使用

    创建新环境
    conda env create -f bar.yaml --name bar
    

    这将确保使用之前环境中的包。

    总体而言,如果您使用从 YAML 文件(包括构建规范)进行克隆和重新创建,那么 Conda 将最大限度地减少下载以及物理磁盘的使用。

    【讨论】:

    • 非常感谢,在阅读了您的回答后,我想我会使用从基本环境中导出的 YAML 并对其进行调整以创建一个新环境,但我不明白您所说的“再次”是什么意思,如果 foo == base,删除 conda”。再次感谢,感谢您的帮助。
    • @Melai11 很抱歉造成混乱。该速记表示如果您要从中导出的环境(我称之为 foo)恰好是 base 环境,那么您将要删除 @987654327 @来自 YAML 文件的包。可能还有其他不需要保留在 YAML 中的包,但我没有/不知道明确的列表。
    • 您好,我已使用此解决方案从 env(不是基础)导出 yaml 文件,现在我打算从基础 env 导出包,我发现了一些以 conda 开头的包和其他以 Anaconda 开头的包,我想知道我应该删除所有这些包还是只删除 conda 包?一如既往,非常感谢。
    猜你喜欢
    • 2019-08-08
    • 2019-12-08
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多