繁体   English   中英

如何导入与系统模块同名的用户模块?

[英]How to import a user module which has the same name with a system module?

我有一个旧版python程序,该程序定义了一个模块,该模块的名称与当前python中的系统模块冲突,最简单的方法是解决此问题? 该模块已在很多地方导入,因此,如果不需要更改旧的python源代码,那就太好了。

您可以使用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

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

将sys导入为realsys

realsys.exit(1)

似乎您必须对名称已重载的系统模块或模块进行此操作,具体取决于哪个模块导致的痛苦最少。

最重要的是,创建模块时,最好完全限定名称,例如,可以创建mylib.sys而不是创建sys (在此示例中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM