如何维护不同版本的Python模块?
我有一个在我们设施中使用的核心Python模块,叫做mfxLib。我需要能够保留这个模块的不同版本,而不影响所有其他导入这个模块的模块或插件。
我的解决办法是通过重命名来保留这个模块的副本,分别叫做mfxLib01和mfxLib02,然后用一个空的模块替换原来的mfxLib模块,这个空模块只包含一个__init__.py
文件,里面导入最新版本的模块。
# content of mfxLib.__init__.py
from mfxLib02 import *
这个方法看起来合理,而且似乎有效,但我在想有没有什么常见的做法或者指导原则可以遵循呢?
谢谢!
3 个回答
0
版本控制几乎肯定会让你的生活变得更简单。除了Petterson的建议,你还可以考虑使用Mercurial。它和git、SVN一样,都是免费的。而且它是用Python写的,应该能在你的任何系统上顺利运行。
Spacedman的建议也很有用,特别是当不同版本之间的差异代表了针对特定系统的定制,而这些定制相对稳定时。请注意,你可以将这种方法与版本控制系统结合使用。
最后,努力编写一个可以在任何地方都能正常工作的模块总是值得的。通常,你可以通过给一些关键函数添加一些可选参数来满足不同的需求。Python在这方面非常方便,因为参数列表末尾的关键字参数总是可选的,所以你可以轻松地通过给它们合适的默认值来保持现有的行为。
def foo(oldarg1, oldarg2, newarg1=None):
if newarg1 != None:
## behave differently
else:
## behave as usual
1
如果你有不同的脚本需要不同的版本,你现在的做法应该是不错的。不过,我建议你使用像Git或SVN这样的版本控制系统。这样的话,你可以轻松地保存和恢复到之前的版本,还可以和其他用户分享这个模块。
4
你可以把一个模块导入时起个别名。这样做通常是为了省去输入长长的模块名字,比如:
import numpy as np
np.array([1,2,3,4])
这样你就可以这样写:
import mfxLib01 as mfxLib
或者
import mfxLib02 as mfxLib
这样你的代码到处都可以用 mfxLib 这个名字。
这样可能会有帮助……