2015-05-21 36 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