我试图用下面的代码将一个旧的模块实现指向一个新的模块实现,但是当模块本身被导入时,我得到AttributeError/ImportError。你知道怎么解决吗?为什么呢oldpack.sub.mymodule模块即使在里面也看不见系统模块?你知道吗
/oldpack/sub/__init__.py
import sys
import newpack.sub.mymodule
sys.modules['oldpack.sub.mymodule'] = sys.modules['newpack.sub.mymodule']
/somepack/app.py
from oldpack.sub.mymodule import some_func, SomeClass # works fine: we got some_func and SomeClass from newpack.sub.mymodule
import oldpack.sub.mymodule # raises AttributeError: 'module' object has no attribute 'mymodule'
from oldpack.sub import mymodule # raises ImportError: cannot import name mymodule
PS我想避免修改oldpack.sub.mymodule模块所以更新到 从newpack.sub.mymodule模块导入*并不理想。你知道吗
已解决
我已经纠正了错误。当一个模块被加载时,发生了两件事,模块被添加到系统模块并且该模块作为属性添加到父包中(请参见import.c中的add\ u submodule)。为了处理后者,我更新了/oldpack/sub/__init__.py
中的第2行
import sys
from newpack.sub import mymodule # by importing this way, we simulate the adding of the module as attribute to the parent package
sys.modules['oldpack.sub.mymodule'] = mymodule
/somepack/app.py
中的第二个和第三个导入之前没有工作,因为它们依赖于作为包中的属性可用的模块。有关详细信息,请使用dis.dis公司(). 你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐