【发布时间】:2017-07-31 14:52:17
【问题描述】:
我有一个顶级脚本(在顶级目录中)导入自定义模块“报告”(在子目录中)
当脚本从使用 re.match 的模块调用函数时,我遇到了导入问题,当我启动它时出现错误:
111 if sys.argv[i] in valid_options:
112 current_option_type = valid_options[sys.argv[i]];
--> 113 if (re.match(r'\barg\b',current_option_type)):
'NameError: name 're' is not defined'`
确实,当我检查导入的模块时,我最终得到了
In [12]: set(sys.modules)&set(globals())
Out[12]: {'datetime', 'os', 'sys'}
为了使其工作,我决定导入另一个模块,该模块本身导入 re(并且位于子目录中):
import ip_interface
我调用我的函数并以同样的错误结束,当我检查时,我有:
In [14]: set(sys.modules)&set(globals())
Out[14]: {'datetime', 'ip_interface', 'os', 'sys'}
所以我改变了导入 ip_interface 模块的方式并执行以下操作:
from ip_interface.ip_interface import *
我检查了我导入的模块:
In [16]: set(sys.modules)&set(globals())
Out[16]:
{'datetime',
'ip_interface',
'knxnet',
'os',
're', ===> I got it !
'socket',
'subprocess',
'sys'}
然后我启动我的脚本并最终得到:
111 if sys.argv[i] in valid_options:
112 current_option_type = valid_options[sys.argv[i]];
--> 113 if (re.match(r'\barg\b',current_option_type)):
NameError: name 're' 未定义
我想知道有什么问题,因为我可以看到导入的“re”模块。
当我直接在我的模块中导入它时,它终于可以工作了。 是否可以“共享”导入并避免在所有需要它的子模块中执行?
【问题讨论】:
-
理论上应该可行。为什么你这样做 from ip_interface.ip_interface import * 而不是 from ip_interface import *?
-
我有一个名为 ip_interface 的包,其中包含 ip_interface.py