As described here, in python it is possible to replace a current module implementation using sys.modules
:
import somemodule
import sys
del sys.modules['somemodule']
sys.modules['somemodule'] = __import__('somefakemodule')
But it doesn't work if import somemodule
is done in the code of another imported module:
In this example:
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`
The call to f
will use somemodule.someFunction
, not somefakemodule.someFunction
Is it possible to make CustomModule
replace its use of somemodule
for somefakemodule
without changing its code? That is, from ClientCode
.