2015-05-21 38 views
2

As described here,在蟒蛇就可以使用sys.modules替换当前模块实现:更换输入模块依赖

import somemodule 

import sys 
del sys.modules['somemodule'] 
sys.modules['somemodule'] = __import__('somefakemodule') 

但如果import somemodule在另一进口模块的代码完成它不工作:

enter image description here

在这个例子中:

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代替其使用的somemodulesomefakemodule,而不改变其码?也就是从ClientCode

回答

4

更换somemodule与进口CustomModulesomefakemodule

import sys 
del sys.modules['somemodule'] 
sys.modules['somemodule'] = __import__('somefakemodule')  

from CustomModule import f 

这样,当CustomModule执行

import somemodule 

Python会在sys.modules找到somemodule并返回缓存模块,somefakemodule