【问题标题】:Is there a way to have platform-specific dependencies in environment.yml?有没有办法在 environment.yml 中拥有特定于平台的依赖项?
【发布时间】:2015-09-30 14:42:22
【问题描述】:

我正在尝试使用 Conda 为项目 (LensKit) 设置构建和测试环境,并且需要具有特定于平台的依赖项。具体来说,在 Linux 版本上我需要 libgfortranopenssl,但在 Windows 上不需要。

我是否可以在environment.yml 中声明我需要libgfortran 但仅在32 位和64 位Linux 平台上?还是我需要有单独的环境定义来涵盖这种情况?

我看到的另一个潜在解决方案是创建一个虚拟包并将其发布到 http://anaconda.org,这仅取决于每个平台所需的基本包,并在 environment.yml 中需要该包。

【问题讨论】:

    标签: python cross-platform conda


    【解决方案1】:

    “虚拟包”实际上称为“元包”。见http://conda.pydata.org/docs/building/meta-pkg.html。这似乎是一个不错的选择。

    或者,您可以为您的项目构建一个 conda 包吗?在 conda 配方的 meta.yml 中,您可以使用不同平台的选择器。 http://conda.pydata.org/docs/building/meta-yaml.html#preprocessing-selectors

    【讨论】:

    • 谢谢。如果预处理选择器也能在 environment.yml 中工作,那就太棒了。
    • 我认为environment.yml 纯粹是作为环境的精确转储。文档明确表示它可能无法跨平台工作。 meta.yml 真的是关于安装确切的要求。我们可能需要忘记 pip,它是使用需求文件安装的方式......
    • 我还发现environment.yml 中的选择器很有用,所以我向github.com/conda/conda/issues/8089 提交了功能请求。
    【解决方案2】:

    我偶然发现了同样的问题,并为这个问题编写了一个小型解析器。在您的情况下,您可以创建一个 environment.yml.meta 文件,如下所示:

    name: demo_env
    dependencies:
      - <your_other_dependencies>
      - libgfortran [platform startswith linux]
      - openssl     [platform startswith linux]
    

    然后用它创建环境

    python create_env.py
    

    这当然与支持原生的不同,因为您需要将解析器作为子模块添加到您的存储库中,或者只是将其复制过来,但也许您会发现它很有用。该项目在 GitHub 上:

    https://github.com/silvanmelchior/cme_parser

    【讨论】:

      猜你喜欢
      • 2020-10-01
      • 2018-05-02
      • 1970-01-01
      • 2020-09-14
      • 2013-04-09
      • 2020-02-04
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多