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