如何维护python模块的不同版本?

时间:2010-12-09 19:17:07

标签: python module

我在我们的工厂中使用了这个名为mfxLib的核心python模块。我需要能够保留此模块的不同版本,而不会破坏导入此模块的所有其他模块/插件。

我的解决方案是通过重命名mfxLib01和mfxLib02来保留模块的副本 用仅包含导入最新版本的__init__.py文件的空模块替换原始mfxLib模块。

# content of mfxLib.__init__.py
from mfxLib02 import *

这似乎是合乎逻辑的,似乎有效,但我想知道是否有这样做的常见做法?要遵循的准则?等

由于

3 个答案:

答案 0 :(得分:4)

您可以将模块导入为其他名称。通常人们使用它来保存长模块名称的输入,例如:

import numpy as np
np.array([1,2,3,4])

因此你可以这样做:

import mfxLib01 as mfxLib

import mfxLib02 as mfxLib

然后你的代码到处使用mfxLib。

这可能会有所帮助......

答案 1 :(得分:1)

如果你有不同的脚本需要不同的版本,你当前的方法应该是最好的,但我建议使用像Git或SVN这样的版本控制系统。这将允许您轻松提交并恢复到早期版本,以及与其他用户共享模块。

答案 2 :(得分:0)

版本控制几乎肯定会让您的生活更轻松。除了Petterson的建议,请考虑Mercurial。像git和SVN一样,它是免费的。它也是用Python编写的,应该可以毫无困难地运行在任何系统上。

Spacedman的建议也很有用,特别是如果版本之间的差异代表特定系统的自定义并且自定义相对稳定。请注意,您可以将该方法与版本控制系统结合使用。

最后,我们总是值得努力编写您的模块,以便它可以在任何地方无需修改地工作。通常,您可以通过向一些关键函数添加一些可选参数来完成此操作,以处理不同的要求。 Python在这方面非常方便,因为arg列表末尾的关键字参数始终是可选的,因此您可以通过为它们提供合适的默认值来轻松安排提供现有行为。

def foo(oldarg1, oldarg2, newarg1=None):
    if newarg1 != None:
        ## behave differently
    else:
        ## behave as usual