有没有办法在 environment.yml 中拥有特定于平台的依赖项?

Is there a way to have platform-specific dependencies in environment.yml?

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

上不需要

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

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

"dummy packages"其实叫"metapackages"。参见 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.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