如何维护库的多个版本

时间:2015-04-01 12:50:59

标签: python

在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

2 个答案:

答案 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

以类似的方式,您可以对依赖项进行版本控制,但是您必须更改包的名称并在导入中指定依赖项。