繁体   English   中英

pip 从conda环境安装时的依赖关系.yaml

[英]pip dependencies of dependencies when installed from conda environment.yaml

我正在尝试为项目的用户创建一个 conda environment.yml 文件。 一种依赖不是由 conda 分发的,但可以通过 pip+github 获得。 我假设基于这个例子,我可以这样做:

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 之前安装吗? 稍后 blah 会干净地更新,从 conda 获得尽可能多的信息吗?

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

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

python -m pip install -U -r <requirements.txt>

所以,明确回答这个问题:如果blah所有依赖项都是通过 Conda 安装的,并且它们安装了足够的版本,那么 Pip 应该只安装blah并且保持 Conda 版本不变。 这是因为--upgrade-strategy的默认值是only-if-needed

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


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

您可以通过环境变量告诉 pip 忽略依赖项

PIP_NO_DEPS=1 conda env create -f myenv.yaml

文档中:

pip 的命令行选项也可以使用PIP_<UPPER_LONG_NAME>格式设置环境变量。 破折号 ( - ) 必须替换为下划线 ( _ )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM