首页 > 解决方案 > 管理 conda 和 pip 之间依赖关系的最佳实践

问题描述

我正在开发一个 Python 库,它依赖于多个包。我正在努力寻找最直接的方法来管理具有以下约束的所有这些依赖项:

我当前的初始安装设置:

此时,一些包已经安装,现在由 conda 管理,其他包由 pip 管理。当我想更新我的环境时,我需要:

我的问题是这是不稳定的:当我更新所有 conda 包时,它确保了它管理的包的一致性。但是,我不能保证整个环境保持一致,我刚刚意识到我错过了一些更新,因为我忘记检查环境的 pip 部分中的更新。

最好的方法是什么?我想过:

标签: pythonpipconda

解决方案


官方文档中关于管理同样需要 PyPI 来源或安装的本地包的 Conda 环境的建议pip是在 YAML 文件中定义所有依赖项(Conda 和 Pip)。就像是:

环境.yaml

name: my_env
channels:
 - defaults
dependencies:
 - python=3.8
 - numpy
 - pip
 - pip:
   - some_pypi_only_pkg
   - -e path/to/a/local/pkg

在这种环境中更新的工作流程是更新 YAML 文件(我建议将其置于版本控制之下),然后创建一个新环境或使用

conda env update -f env.yaml

就个人而言,我倾向于创建新的环境,而不是改变(更新)现有的环境,并>=version在 YAML 中使用最小的约束(即 )。创建新环境时,它应该自动拉取最新的一致包。另外,可以保留 env 的先前实例,以防在开发生命周期中需要回归。


推荐阅读