管理conda和pip之间依赖关系的最佳实践 [英] Best practice to manage dependencies between conda and pip

查看:39
本文介绍了管理conda和pip之间依赖关系的最佳实践的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  • 其中一些依赖项仅以conda包的形式提供(从技术上讲,源代码是可用的,但构建过程不是我想要讨论的内容)
  • 其他依赖项仅通过pip提供
  • 我需要在可编辑或开发人员模式下安装我自己的库
  • 我需要定期更新依赖项

我初始安装的当前设置:

  • 新建Conda环境
  • 使用conda install ...
  • 安装仅Conda依赖项
  • 使用pip install -e .安装我的库
在这一点上,一些软件包已经安装,现在由conda管理,其他的则由pip管理。当我想要更新我的环境时,我需要:

  • 使用conda update --all
  • 更新环境的Conda部分
  • 手动更新环境的pip部分

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

执行此操作的最佳方式是什么?我想过:

  • 使用Conda的pip interoperability feature:这似乎有效,但我得到了一些可疑的结果,可能是因为我使用了Extras_Required
  • 因为pip可以看到conda包,所以初始安装是一致的,这意味着当我想要更新时,可以简单地重新安装所有内容。这很管用,但不是很优雅。

yaml

the official documentation中对于管理也需要推荐答案源代码或pip安装的本地包的conda环境的建议是在yaml文件中定义所有依赖项(conda和pip)。类似于:

env.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

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

这篇关于管理conda和pip之间依赖关系的最佳实践的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆