我们正在建立新的分支机构,所有分支都将共享相同的库.
这样做的问题是,如果我们更新一个库,您可能会破坏所有未更新的应用程序.
因此,我们想对我们的库进行版本控制.
我计划这样做的方式就是这样
loader.load(name='mylib', version='1.0')
Run Code Online (Sandbox Code Playgroud)
或者像这样:
import mylib
mylib.load(version='1.0')
Run Code Online (Sandbox Code Playgroud)
问题是这个装载机如何工作.
天真的方法是将每个版本放在自己的文件夹中,但问题是,如果所有版本中都存在常见错误,则每个版本都需要单独修复.
稍微好一点的方法(可维护性)是将库的所有版本放在同一个文件中,并调用一些加载函数来创建函数链接.我不知道这有多漂亮(我们可能最终得到几千行的怪物文件,我们当然可以删除旧的,未使用的版本).
为了帮助保持版本数量的减少,我打算只在我打破兼容性时增加版本号,而不是在修复错误或添加新内容时.
有没有这样的内置到python或任何其他方法可以工作?
有没有人有这种东西的经验?
我可以补充一点,使用libs的东西都是测试用例,我们只是希望测试人员进入分支并运行./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
Run Code Online (Sandbox Code Playgroud)
用法示例:
>>> from my.module import MyClass_1_1 as MyClass
>>> m = MyClass()
>>> m.func3()
Foo Bar
Run Code Online (Sandbox Code Playgroud)
通常,完成此操作的方法是增加模块名称。您可以设计一种更强大的方法,但这是最容易理解/实现的。
import package.modv2
import package.modv3
Run Code Online (Sandbox Code Playgroud)
每次 API 更改时创建新的模块版本。
也可以在函数级别完成以最小化文件数量:
from package.module import functionv2
from package.module import functionv3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |