在Python环境中维护多个版本的库是否有任何实用的解决方案?
例如,我有一个使用可插拔设计的Web框架。在这个框架下,可以注册几个应用程序(应用程序和框架在同一个python进程中运行)。
每个应用程序都有自己的业务逻辑代码和公共代码,比如common_httplib
。问题是如何确保common_httplib
的多个版本不会相互冲突?
每个应用程序都应使用自己的common_httplib
副本,但版本不同。 绝对导入,导入挂钩,imp 等不起作用,因为common_httplib
可能导入可能具有相同版本问题的其他第三方库。
以下是应用程序的代码结构。
在$FRAMEWORK_HOME/apps/
下,有:
/app1
/common_httplib (version 1)
/third_party libs
/app1 BLO code
/app2
/common_httplib (version 2)
/third_party libs
/app2 BLO code
答案 0 :(得分:0)
不,在同一个应用程序中无法这样做。
请注意,例如,Plone是一个大型项目,其部署依赖于数百个软件包,可以调整已知的良好版本"作为定义版本的主要内容所涉及的所有包。
正确的事情"是为所有产品提交错误报告" A"取决于其他产品的旧版本" B"这是冲突的,所以他们将使用更新版本的" B",并准备补丁来修复它们。 (虽然不接受错误报告,但您使用修复程序运行部署)
您还可以考虑使用进程间通信(例如xmlrpc)在多个进程中拆分应用程序 - 但这取决于您正在执行的操作以及冲突程序包的性质。
答案 1 :(得分:0)
在Python 2.6中,Python 2.7库unittest
被反向移植到2.6 unittest2
,因此Python 2.6有两个库。
测试模块可以选择使用unittest
和:
import unittest
具有高级功能的或unittest2
,其中包含:
import unittest2 as unittest
以类似的方式,您可以对依赖项进行版本控制,但是您必须更改包的名称并在导入中指定依赖项。