替换导入的模块依赖
Replacing an imported module dependency
As described here,在 python 中,可以使用 sys.modules
:
替换当前模块实现
import somemodule
import sys
del sys.modules['somemodule']
sys.modules['somemodule'] = __import__('somefakemodule')
但是如果import somemodule
是在另一个导入模块的代码中完成的,它就不起作用:
在这个例子中:
自定义模块
import somemodule
def f():
print(somemodule.someFunction())
客户端代码
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
.
将 somemodule
替换为 somefakemodule
,然后 导入 CustomModule
:
import sys
del sys.modules['somemodule']
sys.modules['somemodule'] = __import__('somefakemodule')
from CustomModule import f
这样,当CustomModule
执行
import somemodule
Python 将在 sys.modules
和 return 缓存模块中找到 somemodule
,somefakemodule
.
As described here,在 python 中,可以使用 sys.modules
:
import somemodule
import sys
del sys.modules['somemodule']
sys.modules['somemodule'] = __import__('somefakemodule')
但是如果import somemodule
是在另一个导入模块的代码中完成的,它就不起作用:
在这个例子中:
自定义模块
import somemodule
def f():
print(somemodule.someFunction())
客户端代码
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
.
将 somemodule
替换为 somefakemodule
,然后 导入 CustomModule
:
import sys
del sys.modules['somemodule']
sys.modules['somemodule'] = __import__('somefakemodule')
from CustomModule import f
这样,当CustomModule
执行
import somemodule
Python 将在 sys.modules
和 return 缓存模块中找到 somemodule
,somefakemodule
.