使用conda-build进行依赖管理 - 如何摆脱冗余和重复?

时间:2018-02-04 07:54:29

标签: python conda

我有一个基于conda的项目,其中包含一个列出项目依赖项的environment.yml文件。我也想使用这个项目来构建一个conda包。为此,我创建了另一个文件meta.yaml,它还需要列出依赖项。

此外,在meta.yaml中,可以为构建,运行和测试指定单独的依赖项。

我的问题是:

  • meta.yaml中的构建和运行依赖项之间有什么区别?

  • 有没有办法在environment.yml中列出的包(名称和版本)与meta.yaml中列出的包之间进行同步?

1 个答案:

答案 0 :(得分:1)

构建依赖项是构建项目所需的依赖项,而运行依赖项是安装后运行程序包所需的依赖项。例如,您可能需要C编译器在包中构建C扩展,然后您需要(兼容的)C库来运行包。或者,如果您有一个纯Python包,那么您的构建依赖项可能是Python和setuptools,而您的运行依赖项将是您从包中导入的任何其他包。有关详细信息,请参阅the documentation,并注意还有一个测试要求部分,您可以在其中放置仅用于测试程序包所需的依赖项。

据我所知,没有办法自动复制" environment.ymlmeta.yml文件之间的包。你可以想象一下编写某种方式来编写脚本(也许使用一个运行conda build的Makefile),但这看起来非常复杂,并且至少像手动复制依赖关系一样容易出错。此外,environment.yml文件中的包可能只是运行依赖项,或者可能是构建和运行依赖项的混合,在这种情况下,您必须手动管理元中的依赖项.yaml反正。