替换导入的模块依赖项

时间:2015-05-21 16:54:15

标签: python python-2.7 module

As described here,在python中可以使用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替换为somemodule使用somefakemodule?也就是说,来自ClientCode

1 个答案:

答案 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