从 conda environment.yaml

我正在尝试为项目用户创建 conda environment.yml 文件。一种依赖不是由 conda 分发的,而是通过 pip+github 提供的。我假设基于 this example 我可以做到这一点:

dependencies
    - pip
    - regular_conda_dep
    - depend_of_blah
    # Install in editable mode.
    - -e git+https://github.com/ourgroup/blah.git

但是 blah (depend_of_blah) 的依赖关系会发生什么? pip 会在 conda 之后安装,这样只要我小心地包含它,它就会在 blah 之前安装吗?稍后会干净利落地更新,从 conda 中获取尽可能多的内容吗?

或者我需要在 pip 行中添加 --no-deps 吗?是否暗示这是神奇地完成的?我没有看到很多处理这个问题的高级示例,但根据我的经验,在 pip/conda 混合中不使用 --no-deps 是一个真正的危险,pip 基本上劫持了任何没有被使用的东西首先明确处理。

xxxcs001 回答:从 conda environment.yaml

Conda 解析 YAML,并将依赖规范划分为 Conda 集和 Pip 集(code)。仅使用 Conda 集来解决和创建初始环境。1 成功创建环境后,Conda 会将所有 Pip 规范写入临时 {{1} } (code),然后在环境中使用requirements.txt运行命令:

python

所以,要明确回答这个问题:如果 python -m pip install -U -r <requirements.txt> 的所有依赖项都是通过 Conda 安装的,并且它们已经安装了足够的版本,那么 Pip 应该只安装 blah 和保持 Conda 版本不变。这是因为 blah 的默认值为 --upgrade-strategy

否则,如果 Conda 依赖项部分没有包含 only-if-needed 的所有依赖项,那么 Pip 将安装必要的依赖项。


[1]:从技术上讲,如果在 Conda 配置中设置了 blah,Conda 将首先使用这些包创建环境,然后安装指定的依赖项在 YAML 文件中。

本文链接:https://www.f2er.com/12759.html

大家都在问