【问题标题】:What does conda env do under the hood?conda env 在幕后做了什么?
【发布时间】:2019-05-21 05:46:05
【问题描述】:

找了没找到,一定要在这里问:

conda env 如何在后台工作,也就是说,anaconda 如何处理环境?

为了澄清,我想回答或参考以下问题:

  • envs/myenv 文件夹中保存了什么?

  • activate myenv 会发生什么?

  • conda install ... 会发生什么?

  • 我在哪里可以找到这些信息?

【问题讨论】:

  • 请将您的问题限制为每个帖子一个问题...第二个项目符号问题已通过 here 回答。最后一个问题的答案是阅读源代码,我不知道比任何地方更详细的信息。对于第四个问题,我想请你澄清一下你在问什么。您的意思是使用什么算法来解决环境问题,或者字面意思是执行安装所采用的代码路径,或者包是如何移动的……您能否澄清一下您的意思是第一个 q 中的 conda env 命令?
  • @darthbith 我的问题是“conda env 如何在后台工作?”。其他问题是为了澄清这个问题。显然我可以从代码中推断出任何行为,但我正在寻找关于 anaconda 如何处理环境的文档,但我无法找到,因此是最后一个问题。

标签: python anaconda virtualenv conda


【解决方案1】:

Conda 环境

基本上,conda 环境复制了您系统的结构,这意味着它将存储/bin/lib/etc/var 以及其他目录。这对于 unix 系统更为明显,但在 windows 下也是如此(DLLslibsScripts,...)。 更多详情请关注official documentation

康达安装

这个想法是conda install PACKAGE 将从channel(一个conda 包存储库)获取一个预编译包,并将其安装在这个类似系统的结构下。 conda 不会依赖系统依赖,而是将这个包的所有依赖安装在环境结构下,只使用 conda 包。 因此,在不同系统下的给定时间点安装相同的包应该会导致可靠的相同安装。

这是一种标准化二进制文件的方法,它只能通过针对给定版本的库预编译每个包来实现,这些库作为 conda 环境的依赖项提供。例如,conda-forgebioconda 频道依靠基于云的 CI/CD 管道在相同且完全干净的系统映像上编译所有包。

Conda 还存储有关这些包的元数据(版本、内部版本号、依赖项、许可证等),因此它能够解决相当复杂的依赖关系树并避免包/库不兼容。每次执行conda install时都是Solving...步骤。

Conda 激活

然后,当您conda activate ENV 时,conda 会将环境根目录 $CONDA_PREFIX/bin 附加到 PATH,以便系统可以找到安装在环境中的所有可执行文件(并且会在系统范围内安装相同的可执行文件) . 您可以将其想象为将系统可执行文件暂时替换为环境中的可执行文件。

更多

这是一个非常基本的解释,不是 100% 准确,当然也不完整。如果您想了解更多信息,请阅读文档,尝试使用 conda,也许还可以深入了解 Conda-forgeBioconda 如何构建包,因为所有内容都托管在 github 上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多