如何畅达内部工作?

问题描述 投票:8回答:3

我搜索了一会儿,但现在找不到任何令人满意的答案:

如何康达(http://conda.pydata.org)内部工作?任何细节,欢迎...

此外,因为它是蟒蛇无关,显然是工作这么好流利,为什么不使用像恰当的或通用软件包管理器荫?

什么是使用只畅达的包管理程序的限制?将它的工作?

或者反过来想,为什么是如APT和百胜无法提供的功能畅达提供?比那些包管理器畅达“更好”或只是不同?

感谢您的任何提示!

python environment package-managers conda
3个回答
21
投票

我在SciPy 2014 talk解释了很多本。让我举一个小的轮廓在这里。

首先,一个畅达包是非常简单的。这仅仅是一个将被安装在一个info目录中一些元数据文件压缩包。例如康达包python是文件的压缩包

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

您可以看到究竟是什么样子看在蟒蛇pkgs目录提取的包。完整的规范是在https://docs.conda.io/projects/conda-build/en/latest/source/package-spec.html

当畅达安装此,它提取的压缩包到pkgs目录和硬文件的链接进入安装环境。最后,有一定硬编码的安装路径的一些文件有这个替换(通常家当线)。

这基本上它。有一些发生在依赖分辨率方面更多的东西,但是一旦它知道哪些软件包它要安装这是怎么做到的。

建立包的过程是一个比较复杂的。 @ mattexx的答案,并将其链接到该文档描述了一下的建设使用畅达构建一个软件包的正规途径。

为了回答您的其他问题:

此外,因为它是蟒蛇无关,显然是工作这么好流利,为什么不使用像恰当的或通用软件包管理器荫?

你当然可以。这个限制的唯一的事情是订包已经建成的畅达。在Windows中,这是一个非常不错的选择,在目前还没有任何系统软件包管理器一样有在Linux上。

什么是使用只畅达的包管理程序的限制?将它的工作?

这是可行的,假设你有畅达包一切你感兴趣的,主要的限制是畅达只是想东西安装到畅达环境本身,所以需要在系统上的具体安装位置的东西可能不是很适合畅达(尽管它仍然是可行的,如果你设置该位置为环境路径)。或者例如,畅达可能不是“项目级”包管理器,如凉亭合适的替代者。

此外,畅达可能不应该被用来管理(必须安装在/前缀库)系统级的库,例如内核扩展或内核本身,除非你打造出一个使用畅达作为一个包管理器中的分布明确。

最主要的我会说这些东西是康达包装通常由被重定位,这意味着包装不要紧的安装前缀。这就是为什么硬编码路径被变更为安装过程的一部分,例如。这也意味着,与畅达构建内置动态库都会有自己RPATHs(在Linux上),并安装名称(在OS X)自动更改为使用相对路径,而不是绝对的。

或者反过来想,为什么是如APT和百胜无法提供的功能畅达提供?比那些包管理器畅达“更好”或只是不同?

在某些方面,它的好,而且在某些方面它不是。您的系统包管理器知道你的系统,并有在那里程序包,不会是在畅达(还有一些,如内核,这可能不应该在畅达)。

畅达的主要优点是它的环境的概念。由于包是用来被重定位,可以安装在多个位置相同的封装,并有效地拥有一切的完全独立安装,基本上是免费的。

是否使用某种类型的集装箱化

没有,唯一的“集装箱”是有单独的安装目录,使包重定位。

或者所有依赖的静态链接,

到相关性完全取决于包本身。有些软件包静态链接它们的依赖关系,有些则没有。该动态链接库具有如我如上所述是可重定位他们的负载路径改变。

为什么会这样“跨平台”?

在这种情况下,“跨平台”是指“跨操作系统”。虽然同样的二进制包不能跨OS X,Linux和Windows上工作,问题是,畅达本身同样工作在所有三个,因此,如果您拥有了所有三个平台建立在同一个包,你可以管理他们所有的同这样不论是哪一个,你都在。


3
投票

我在软件方面的专家,但我一直在使用畅达维持数月的内部资料库,这样我就可以共享的洞察力“高级用户”。这里有很多的问题,所以我会尽量回答秩序。

如何康达(http://conda.pydata.org)内部工作?任何细节,欢迎...

最简洁的参考我可以分享的是conda-build doc,其中详细解释了畅达的食谱。

TL; DR食谱是与描述的名称,版本,源位置,依赖(构建,测试,运行)来包一个配置文件meta.yaml文件夹,基本测试安装后运行。它还包含构建脚本(或多个)(build.sh和/或bld.bat为Linux和赢,分别地),其执行不是下载源之外的任何构建步骤。

安装包括(简称)下载源,创建构建环境,建设,创建测试环境和测试。您可以安装一些系统范围或在环境中安装它:

conda install -n myenv mypkg # install only in myenv
conda install mypkg # install globally

激活的环境下工作完全一样使用的virtualenv:

source activate myenv

什么是使用只畅达的包管理程序的限制?将它的工作?

它会工作。你可以安装你想要什么畅达,如果你有一个支持你的环境的良方。你会遇到的问题是包的支持。康达维护者和用户创建各种渠道包的生态系统,但对于二进制软件包的支持相当多限于那些通常由Python包需要,其中许多只支持一个或两个平台。贴切,百胜等用户保持各种东西对他们各自的平台。

在我们的例子中,我们需要支持Ubuntu和OSX,因此我们维持通过木偶等愚蠢的魔法很多依赖于平台的二进制包,我们用畅达,以保持两个平台的Python包。如果存在了所有我们使用的二进制包畅达包,我可能会考虑使用畅达,而不是容易冲泡,等,但是如果我们使用的食谱已经过时我将有可能承担显著配方维护。这是Python包管理的情况下,如果畅达填补了巨大的空白罚款我们,但我还没有准备好采取对我们有现有的工具来维护包。我们会看到,如果我的思想为康达生态系统的日趋成熟而改变。一个工具来统治他们将是很好的,但我不认为畅达准备为我作出这样的跳跃。

是否使用某种集装箱化,或所有依赖静态链接,为什么会这样“跨平台”?

“跨平台”可以有许多含义。对于Python包,跨平台意味着你可以使用任何版本的Python,你所需要的包创建环境。对于Linux / WIN口味和发行版,您可以根据环境的构建脚本做你想要的一样多。作为一个例子,看看在conda build script for qt。它有OSX和Linux适当安装。该脚本可以为所欲为,但。您可以切换基于操作系统版本或任何你想要的。如果他们不支持安装平台许多食谱只会失败。

希望你发现这很有帮助。


1
投票

我看有没有人谁真正明白畅达如何运作愿意分享他们的知识。这是不幸的...

我可以提供conda build行动的高层次序列:

  1. 看着meta.yaml找到RUN + BUILD DEPS
  2. 创建名为新ENV:“_build” 将安装RUN + BUILD从meta.yaml依赖
  3. 获取源代码conda_bld /工作
  4. 构建包: 充分的环境“snapshot1” HOME_DIR: 'conda_bld /工作',运行:“SH build.sh '的setup.py安装conda_bld /工作'(安装localy到_build ENV) 充分的环境“snapshot2” 礼包内容是“差异snapshot1 snapshot2”
  5. 运行测试: 创建“_test” ENV与“{刚建的包,请DEPS}” 运行测试

靠这与@asmeurer Youtube链接应该让你开始。

© www.soinside.com 2019 - 2024. All rights reserved.