As described here,在python中可以使用sys.modules
替换当前模块实现:
import somemodule
import sys
del sys.modules['somemodule']
sys.modules['somemodule'] = __import__('somefakemodule')
但如果在另一个导入模块的代码中完成import somemodule
,它就不起作用:
在这个例子中:
CustomModule
import somemodule
def f():
print(somemodule.someFunction())
ClientCode
from CustomModule import f
import sys
del sys.modules['somemodule']
sys.modules['somemodule'] = __import__('somefakemodule')
f() #Will use `somemodule.someFunction`
对f
的来电将使用somemodule.someFunction
,而不是somefakemodule.someFunction
是否可以在不更改代码的情况下使CustomModule
替换为somemodule
使用somefakemodule
?也就是说,来自ClientCode
。
答案 0 :(得分:8)
在导入somemodule
之前将somefakemodule
替换为CustomModule
:
import sys
del sys.modules['somemodule']
sys.modules['somemodule'] = __import__('somefakemodule')
from CustomModule import f
这样,CustomModule
执行时
import somemodule
Python会在somemodule
中找到sys.modules
并返回缓存的模块somefakemodule
。