【发布时间】:2011-11-08 14:56:35
【问题描述】:
我们正在工作中建立新的分支,它们都将共享相同的库。
问题在于,如果我们更新一个库,您可能会破坏所有未更新的应用程序。
因此,我们希望对我们的库进行版本控制。
我打算这样做的方式是这样的
loader.load(name='mylib', version='1.0')
或者可能是这样的:
import mylib
mylib.load(version='1.0')
问题是这个加载器将如何工作。
天真的方法是将每个版本都放在自己的文件夹中,但是这样做的问题是,如果所有版本都存在共同的错误,则每个版本都需要单独修复。
更好的方法(为了可维护性)是将库的所有版本放在同一个文件中,并调用一些创建函数链接的加载函数。 我不知道这会有多漂亮(我们最终可能会得到几千行的怪物文件,我们当然可以删除旧的、未使用的版本)。
为了帮助减少版本数量,我计划仅在破坏兼容性时增加版本号,而不是在修复错误或添加新内容时增加版本号。
python 中是否有类似的内置方法或任何其他可行的方法?
有没有人有这方面的经验?
我可以补充一点,使用库的东西是测试用例,我们只希望测试人员 cd 进入分支并运行 ./testit.py,仅此而已。
解决方案
解决方案基于 Gringo Suave 的建议。
class MyClass_1_0:
def func1(self):
return 'Baz'
def func2(self):
return 'Bar'
class MyClass_1_1(MyClass_1_0):
# Overwriting a function:
def func1(self):
return 'Foo'
# Definining a new function which uses a function
# from a previous version:
def func3(self):
print("{} {}".format(self.func1(), self.func2()))
# Change this to the latest version for stuff that always wants the latest
class MyClass(MyClass_1_1): pass
示例用法:
>>> from my.module import MyClass_1_1 as MyClass
>>> m = MyClass()
>>> m.func3()
Foo Bar
【问题讨论】:
标签: python versioning