conda env 在幕后做了什么?

What does conda env do under the hood?

找了没找到,只好在这里问一下:

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

为了澄清,我想要一个答案或参考问题,例如:

Conda 环境

基本上,conda 环境会复制您系统的结构,这意味着它将存储 /bin/lib/etc/var 等目录。这在 unix 系统中更为明显,但在 windows(DLLslibsScripts、...)下也是如此。 official documentation.

中的更多详细信息

康达安装

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

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

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

Solving...

康达激活

然后当你conda activate ENV时,conda将环境根$CONDA_PREFIX/bin添加到PATH,这样安装在环境中的所有可执行文件都会被系统找到(并且会使系统过载- 同一可执行文件的广泛安装)。 您可以想象它暂时用环境中的可执行文件替换系统可执行文件。

更多

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