Python 如何在不导入模块的情况下替换模块?

Python 如何在不导入模块的情况下替换模块?,python,python-2.7,python-import,python-module,Python,Python 2.7,Python Import,Python Module,我想测试一个名为“x”的模块,它导入一个名为“y”的模块。问题是导入y需要几秒钟。如何为x编写一个测试,用自己的模块替换y,同时防止y被导入 据我所知,所有允许替换模块的Python库都需要先导入模块。因此,假设我们有这些模块x和y: # x.py import y y.foo() 考虑到这些模块,以下模块显然会出现故障: # test_real.py import x 。。。在导入x之前,我们需要让Python相信y已经被导入(用z代替)。这其实很简单: # test_fake.py im

我想测试一个名为“x”的模块,它导入一个名为“y”的模块。问题是导入y需要几秒钟。如何为x编写一个测试,用自己的模块替换y,同时防止y被导入


据我所知,所有允许替换模块的Python库都需要先导入模块。

因此,假设我们有这些模块
x
y

# x.py
import y
y.foo()
考虑到这些模块,以下模块显然会出现故障:

# test_real.py
import x
。。。在导入
x
之前,我们需要让Python相信
y
已经被导入(用
z
代替)。这其实很简单:

# test_fake.py
import sys
sys.modules['y'] = __import__('z')

import x
。。。它的工作原理是:

$ python test_fake.py 
Yessir!
# z.py
def foo():
    print "Yessir!"
# test_fake.py
import sys
sys.modules['y'] = __import__('z')

import x
$ python test_fake.py 
Yessir!