如何导入与系统模块具有相同名称的用户模块?

时间:2011-05-11 16:53:41

标签: python

我有一个遗留的python程序,它定义了一个模块,其名称与当前python中的系统模块冲突,最简单的解决方法是什么?这个模块已经在很多地方导入了,所以如果不需要改变旧的python源就会很棒。

2 个答案:

答案 0 :(得分:2)

您可以使用imp module创建自定义导入例程。例如,在这里我导入了一个名为string的模块,它隐藏了真正的字符串模块:

import imp

def user_import(name, path):
    mod_file, mod_path, mod_desc = imp.find_module(name, [path])
    return imp.load_module(name, mod_file, mod_path, mod_desc)

# load the real 'string' module
import string
print string.digits

# load the user 'string' module which lives under the path './foo'
mod = user_import('string', './foo')
print mod.digits

输出:

0123456789
thesearenotdigits

答案 1 :(得分:1)

导入模块时,您始终可以重命名模块,例如:

  

将sys导入为realsys

     

realsys.exit(1)

对于名称已经过载的系统模块或模块,您似乎必须这样做,具体取决于导致最小痛苦的原因。

最重要的是,当您创建模块时,最好更完全地限定名称,例如您可以创建sys

,而不是创建mylib.sys(在此示例中)