Python 处理不同的必需包版本

Python 处理不同的必需包版本,python,Python,谢天谢地,我以前从未遇到过这种情况,可悲的是,我确实遇到过 我的应用程序现在导入2个包,每个包导入请求库。两位作者将请求的版本与不同的版本挂钩。一个想要2.1.0,另一个想要2.3.0 自动化测试似乎在这两方面都能通过。我的应用程序似乎在这两个平台上都能完美运行 但是,由于这些要求,我的应用程序无法启动。从我对开发环境的理解来看,这是因为版本号被固定在requirements.txt文件中。[在开发中,我们有PasteDeploy+Waiteress,在PasteDeploy中引发了一个异常;在

谢天谢地,我以前从未遇到过这种情况,可悲的是,我确实遇到过

我的应用程序现在导入2个包,每个包导入请求库。两位作者将请求的版本与不同的版本挂钩。一个想要2.1.0,另一个想要2.3.0

自动化测试似乎在这两方面都能通过。我的应用程序似乎在这两个平台上都能完美运行

但是,由于这些要求,我的应用程序无法启动。从我对开发环境的理解来看,这是因为版本号被固定在requirements.txt文件中。[在开发中,我们有PasteDeploy+Waiteress,在PasteDeploy中引发了一个异常;在生产中,我们有uwsgi]

我唯一能想到的处理方法是:

分叉项目 将系统更改为不使用压缩鸡蛋,然后运行修补程序。 这两个都将是维护的麻烦,并且会给构建/部署过程增加很多复杂性


有人有其他建议吗?

你有几个选择,这些是我唯一能想到的:

对不起,这可能是最简单/最快的, 等待旧软件包的新版本,或 把它改成不用拉链鸡蛋,我真的不明白这一点。 [编辑]你可能会诱使一个人认为它正在使用它的版本吗。我不知道具体细节,但据我所知,你可以使用虚拟机。
可能还有其他我不知道的可能,但这就是我所能想到的,希望你能找到一个解决办法

把第一个项目分成要求>=2.1.0的部分,然后向上游提交,看看他们是否会接受它,怎么样?实际上,除非requests 2.2.0中有一个严重的bug,并且根据版本控制策略,一个破坏性的API更改将是一个严重的bug,否则任何人都不应该这样做。这只会是一个很短时间内维护的麻烦,特别是如果你愿意坚持使用fork而不进行更新,直到上游发生变化。还有一个更可怕的选择可能适用:如果你实际上不需要在同一个过程中导入两个包,您可以有两个虚拟环境,甚至两个完全独立的Python安装,一个是请求2.1.0和需要它的包,另一个是需要该包的代码,另一个是2.3.0等,通过管道或任何IPC进行通信。我已经做了更极端的版本,使用了一个还没有更新到Python2.6的库和一个需要2.6的库。我已经向这两个项目提交了申请单,以更好地支持请求,并注意到通过的包。第一个项目拒绝了>=2.1.0的补丁,因为过去的API破坏性更改,但我建议使用>=2.1.0的窗口方法,实际上我正在考虑第二个可怕的选项。我只是太害怕了,不敢承认。正如我说的,我实际上做了一个可怕的选择;有时候,最后的办法是你唯一的选择。但是,如果阻止两个库使用2.1.0或2.3.0的唯一原因是需求,那么是的,我认为您做出了正确的选择,在fork中更改它并向上游提交。如果成功了,你可能想发布并接受自己的答案。或者,如果你认为这对其他人没有帮助,删除你的问题,但我认为这可能会有帮助。那么你建议他做他在问题中提出的一个想法?这对他已经知道的有什么补充?