【发布时间】:2019-10-21 23:45:30
【问题描述】:
我正在开发一个 Python 包 my_package,它依赖于其他一些包 foo_package。
社区中使用了几个版本的foo_package,不幸的是它们彼此不向后兼容。 (因为我的代码编译所针对的 C 接口发生了变化)。
所以我想分发my_package的多个副本,对应foo_package的不同版本。
我可以使用发布后标签来区分my_package 的这些不同副本。例如我可以给my_package 版本1.1.4-foo_package1.2,对应于版本1.1.4 的my_package 针对版本1.2 的1.2 编译。
到目前为止一切顺利。现在需要注意的是,当使用pip 安装它时,最终用户必须指定这个完整版本字符串才能获得my_package 的正确版本。也就是说,他们必须知道my_package 的最新版本是1.1.4,而他们正在使用的foo_package 的版本是1.2,因此使用命令pip install my_package==1.1.4-foo_package1.2。
显然,出于各种原因,这并不理想。 (终端用户友好,避免依赖地狱......)毕竟,所有这些都可以通过编程来确定!
是否有任何明智的方法来处理此问题,以便最终用户只需运行 pip install my_package 并自动下载正确的副本?
对于类似的问题here,有一个不满意的答案。
FWIW 到目前为止我想出的最佳解决方案是创建另一个包 my_package_installer 作为其 setup.py 的一部分检查安装的 foo_package 的版本,然后指定 my_package 的相关版本作为setuptools.setup 的install_requires 参数。但这完全是愚蠢的,而且看起来很脆弱。我不可能是唯一一个遇到这个问题的人。
【问题讨论】:
标签: python pip python-packaging