【发布时间】:2020-08-12 16:35:21
【问题描述】:
我正在开发一个 Python 库,它依赖于多个包。我正在努力寻找最直接的方法来管理所有这些依赖项,并具有以下约束:
- 其中一些依赖项仅作为 conda 包提供(技术上源代码可用,但构建过程不是我想要了解的内容)
- 其他依赖项只能通过 pip 获得
- 我需要在可编辑或开发者模式下安装我自己的库
- 我需要定期更新依赖项
我当前的初始安装设置:
- 创建新的 conda 环境
- 使用
conda install ...安装仅 conda 依赖项 - 使用
pip install -e .安装我的库
此时,一些包已安装,现在由 conda 管理,其他包由 pip 管理。当我想更新我的环境时,我需要:
- 用
conda update --all更新环境的conda部分 - 手动更新环境的 pip 部分
我的问题是这是不稳定的:当我更新所有 conda 包时,它确保了它管理的包的一致性。但是,我不能保证整个环境保持一致,我只是意识到我错过了一些更新,因为我忘记检查环境的 pip 部分中的更新。
最好的方法是什么?我想到了:
- 使用 conda 的 pip interoperability feature :这似乎可行,但我得到了一些可疑的结果,可能是因为我使用了 extras_require
- 由于 pip 可以看到 conda 包,初始安装是一致的,这意味着我可以在需要更新时简单地重新安装所有内容。这可行,但并不完全优雅。
【问题讨论】:
-
是的,这是我为了解当前工作流程而阅读的内容之一。虽然它在初始安装时工作得相对较好,但当它同时由 conda 和 pip 管理时,很难使环境保持最新。
-
将更新逻辑包装在脚本中可以解决您的问题吗?例如,执行 update.sh(update.sh 包含更新 conda/pip 环境的所有逻辑)?