【发布时间】:2026-02-09 04:25:02
【问题描述】:
我可以在正常导入时简单地重新加载模块(imp.reload(模块或别名))。 但是是否可以在导入当前命名空间后重新加载所有内容(来自 module import *)?
imp.reload(module) 说“名称:module 未定义”不起作用
【问题讨论】:
标签: python module python-import
我可以在正常导入时简单地重新加载模块(imp.reload(模块或别名))。 但是是否可以在导入当前命名空间后重新加载所有内容(来自 module import *)?
imp.reload(module) 说“名称:module 未定义”不起作用
【问题讨论】:
标签: python module python-import
当您执行from module import * 时,该模块中的所有内容都被提取到当前命名空间中,最后对module 的引用被删除。但是,由于模块缓存,模块对象仍然可以从sys.modules 访问,因此如果您稍后进行更多导入,则不必再次获取模块。
也就是说,做你所期望的一种方法是:
import sys
from foo import *
print A, B #prints 1, 2
A, B = 100, 200
mod = reload(sys.modules['foo'])#use imp.reload for Python 3
vars().update(mod.__dict__) #update the global namespace
print A, B #prints 1, 2
附带说明,使用import * 是usually frowned upon:
请注意,通常从模块导入 * 或 package 不受欢迎,因为它经常导致代码可读性差。 但是,可以使用它来节省交互式会话中的输入。
【讨论】: