Conda(基本)环境是否应该保持最新状态?

时间:2019-05-21 06:45:10

标签: python anaconda conda package-management

我很高兴通过Conda安装使用miniconda来管理python环境。

安装后,我将独自留在base环境中,并为新项目创建新环境。然后我根据需要conda env update这些环境。但是,我不确定这是正确的方法。

在创建新环境之前,应该base环境是conda env update吗?

认为这将使磁盘使用率降低,因为我可能不正确的理解是,如果软件包和依赖项完全匹配,那么在创建新环境时,Conda会将软件包链接到base环境。 / p>

尽管...这没什么意义,因为它们很容易不同步。也许可以节省带宽,因为可以复制而不是下载匹配的软件包?

如果每个项目都有自己的环境,base环境是否保持最新状态是否重要?

2 个答案:

答案 0 :(得分:4)

Conda将所有程序包链接到pkgs文件夹,该文件夹由所有环境共享,并且不以任何特殊方式与 base 关联。每当任何环境安装或升级软件包时,它们都会去那里,并且没有任何明显的努力从现有软件包中获取资源-如果依赖解决程序碰巧解析为缓存的软件包,它将使用它。当前,没有用于在整个环境中维持软件包同步的机制,因此必须设计一种工作流程来实现。

潜在的工作流程

从理论上讲,可以使用Conda's env cloning来最大化软件包版本同步。为此,您可以从概念上将环境分为三类:

  • 基本环境:仅用于核心基础架构,例如condajupytergit等。您可以根据需要自由更新新的命令行软件或需要conda update conda。它应该与其他环境几乎没有重叠。
  • 模板环境:集中通用的软件包集,通常按版本限制进行分组。例如,对于不同项目可能需要的不同版本的Python,可能会有一个py27-tmplpy36-tmplpy37-tmpl。在这里,您将安装跨项目所需的最大软件包通用子集。模板环境的主要目的是制作一个...
  • 项目环境:与特定的开发项目相关联,最初是作为模板环境的克隆而派生的。其中的大多数核心软件都来自模板,然后应在此处安装其他软件。一旦开始一个项目,为了保持开发的稳定性,就将其保持相对固定。

这样的结构将最大限度地重用现有软件包版本。也可以使用package pinning来确保将来的依赖性解决方案不会从模板包升级。但是,这可能会限制为其他软件包安装某些最新版本。

不幸的是,您仍然会遇到与直觉相似的同步问题:虽然可以在创建新克隆之前更新这些模板env,但不会更新以前从它们衍生的克隆。但是对于项目环境,我认为最佳实践是一旦开始工作就不要对其进行操作。如果您关心空间,那么除了完成模块化项目,然后在使用后归档和删除项目环境外,别无选择。这样,偶尔会运行conda clean

答案 1 :(得分:0)

您可能应该使用

conda update conda(来自您的默认环境)

每隔一段时间,以获取各种补丁程序和安全更新的最新信息。