在environment.yml中是否有一种方法可以使用特定于平台的依赖项?

15

我正在尝试使用Conda为一个项目(LensKit)设置构建和测试环境,并需要具备特定于平台的依赖项。特别是,在Linux构建中,我需要libgfortranopenssl,但在Windows上不需要。

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

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

3个回答

7

3
谢谢。如果预处理选择器也能在environment.yml中工作就太棒了。 - Michael Ekstrand
我认为 environment.yml 只是一个环境的精确转储。文档明确表示它可能无法跨平台使用。而 meta.yml 真正关注的是安装精确的要求。我们可能需要忘记 pip 和使用 requirements 文件进行安装的方式... - faph
3
我认为在environment.yml中添加选择器也很有用,因此我在 https://github.com/conda/conda/issues/8089 提交了一个功能请求。 - Christoph

5

我遇到了相同的问题,并编写了一个小解析器来解决这个问题。在您的情况下,您可以创建一个名为 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

3

conda-lock现在支持在environment.yml文件中使用处理选择器(在版本1.3.0中添加)。

因此,如果您有一个像这样的environment.yml文件(请注意# [not osx]选择器):

name: python-project
channels:
  - nvidia
  - pytorch
  - conda-forge
  - nodefaults
dependencies:
  - python=3.10.*
  - pip # pip must be mentioned explicitly, or conda-lock will fail
  - pytorch-cuda=11.8 # [not osx]

当您运行conda-lock -k explicit时,选择器将确保在Mac OSX的锁定文件中不写入pytorch-cuda依赖项。然后,您可以运行conda update --file conda-<linux/osx/win>-64.lock来更新环境中的依赖项。
在撰写本文时,尽管锁定依赖项,conda-lock仍显示警告:

WARNING:conda_lock.src_parser.selectors:filtered out line - pytorch-cuda=11.8 # [not osx] due to unmatchable selector

但是,它成功地生成了带有pytorch-cuda的Windows/Linux锁定文件,并且没有pytorch-cuda的OSX锁定文件。
这是针对我最近遇到的Pytorch CUDA问题,但对于您的依赖关系应该也适用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接