gpt4 book ai didi

python - conda 如何在内部工作?

转载 作者:太空狗 更新时间:2023-10-29 19:32:56 28 4
gpt4 key购买 nike

我现在搜索了一段时间,但找不到任何满意的答案:

conda ( http://conda.pydata.org ) 如何在内部工作?欢迎提供任何详细信息...

此外,由于它与 python 无关并且显然工作得如此流畅和流畅,为什么不将它用作像 apt 或 yum 这样的通用包管理器?

仅使用 conda 作为包管理器有什么限制?它会起作用吗?

或者反过来,为什么是例如apt 和 yum 无法提供 conda 提供的功能? conda 比那些包管理器“更好”还是不同?

感谢您的任何提示!

最佳答案

我在 SciPy 2014 talk 中对此进行了大量解释.让我在这里稍微概述一下。

首先,conda 包非常简单。它只是要安装的文件的压缩包,以及 info 中的一些元数据。目录。例如 python 的 conda 包是文件的压缩包

info/
files
index.json
...
bin/
python
...
lib/
libpython.so
python2.7/
...
...
...

通过查看 Anaconda pkgs 中提取的包,您可以准确地看到它的样子。目录。完整规范位于 https://docs.conda.io/projects/conda-build/en/latest/source/package-spec.html .

当 conda 安装它时,它会将 tarball 解压缩到 pkgs目录并将文件硬链接(hard link)到安装环境中。最后,一些具有硬编码安装路径的文件将其替换(通常是shebang 行)。

基本上就是这样。在依赖项解析方面还有更多的事情发生,但是一旦它知道要安装哪些包,它就是这样做的。

构建包的过程稍微复杂一些。 @mattexx 的回答及其链接的文档描述了一些使用 conda build 构建包的规范方法。

回答您的其他问题:

Furthermore, as it is python agnostic and apparently work so well and fluently, why is it not used as a general purpose package manager like apt or yum?



你当然可以。唯一限制这一点的是为 conda 构建的软件包集。在 Windows 上,这是一个非常好的选择,因为没有像 Linux 上那样的任何系统包管理器。

What are the restrictions of using only conda as package manager? Would it work?



它会工作,假设你有你感兴趣的一切的 conda 包。主要限制是 conda 只想安装东西到 conda 环境本身,所以需要系统上特定安装位置的东西可能不太适合 conda (尽管它仍然可行,如果您将该位置设置为您的环境路径)。或者,例如,conda 可能不适合替代像 bower 这样的“项目级”包管理器。

此外,conda 可能不应该用于管理系统级库(必须安装在 / 前缀中的库),例如内核扩展或内核本身,除非您要构建使用 conda 作为包的发行版经理明确。

关于这些事情我要说的主要是 conda 包通常是可重定位的,这意味着包的安装前缀无关紧要。例如,这就是为什么在安装过程中更改硬编码路径的原因。这也意味着使用 conda build 构建的动态库将自动更改其 RPATH(在 Linux 上)和安装名称(在 OS X 上)以使用相对路径而不是绝对路径。

Or the other way round, why are e.g. apt and yum not able to provide the functionality conda provides? Is conda "better" than those package manager or just different?



在某些方面它更好,在某些方面它不是。您的系统包管理器了解您的系统,并且其中有一些包不会在 conda 中(还有一些,如内核,可能不应该在 conda 中)。

conda 的主要优点是它的环境概念。由于包是可重定位的,您可以在多个位置安装相同的包,并有效地完全独立安装所有内容,基本上是免费的。

Does it use some kind of containerization



不,唯一的“容器化”是拥有单独的安装目录并使包可重定位。

or static linking of all the dependencies,



依赖链接完全取决于包本身。有些包静态链接它们的依赖项,有些则没有。如上所述,动态链接库的加载路径已更改为可重定位。

why is it so "cross platform"?



在这种情况下,“跨平台”意味着“跨操作系统”。虽然同一个二进制包不能在 OS X、Linux 和 Windows 上运行,但关键是 conda 本身在这三个平台上的工作方式相同,所以如果你为所有三个平台构建了相同的包,你可以完全相同地管理它们方式不管你在哪一个。

关于python - conda 如何在内部工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27753898/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com