有没有办法强制import x
在Python中始终重新加载x
(即,就好像我调用了reload(x)
,或 Python 3 的 imp.reload(x) )?或者一般来说,是否有某种方法可以强制每次运行 import x
时运行某些代码?我可以接受猴子补丁或黑客攻击。
我尝试将代码移至单独的模块中,并从该单独文件中的 sys.modules 中删除 x 。我涉足了一些导入钩子(Hook),但我并没有太努力,因为根据文档,它们仅在检查 sys.modules 缓存后才会被调用。我还尝试使用自定义 dict 子类对 sys.modules
进行猴子修补,但每当我这样做时,from module import submodule
都会引发 KeyError
(我是猜测 sys.modules 不是真正的字典)。
基本上,我正在尝试编写一个调试工具(这就是为什么这里可以进行一些黑客攻击)。我的目标很简单,import x
的输入时间比 import x;x.y
更短。
最佳答案
如果您确实想更改 import
语句的语义,则必须修补解释器。 import
检查指定的模块是否已加载,如果是,则不执行任何操作。您必须准确地更改这一点,这是解释器中硬连线的。
也许您可以接受修补 Python 源代码以使用 myImport('modulename')
而不是 import modulename
?这使得 Python 本身成为可能。
关于Python:强制每个导入重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22056351/