我编写了一个自定义Python模块加载器/导入器,它具有find_module和load_module方法。当我想用它导入Cherrypy模块时,我遇到了一些问题。
在
cherrypy / __ init __。py
它有如下行:
from cherrypy._cpcompat import urljoin
当我使用默认的Python导入程序时,只添加一个虚假的导入程序,例如:
class FakeImporter(object):
def find_module(self, module_name, path=None):
print module_name, path
return None
我接到以下电话:
find_module( '的CherryPy')
find_module( 'cherrypy.cherrypy')
find_module( 'cherrypy._cpcompat')
听起来很正常。但是当我使用我的自定义加载器时,我接到了电话:
find_module( '的CherryPy')
find_module( 'cherrypy.cherrypy')
find_module( 'cherrypy.cherrypy._cpcompat')
可能导致此问题的原因是什么?我处理load_module('cherrypy.cherrypy')错了吗?我从内存中加载模块,因此将cherrypy。路径设置为['cherrypy'],同时将文件设置为'cherrypy', loader 我的装载机,名称到'cherrypy'和包到'cherrypy'。有什么遗失的吗?
答案 0 :(得分:0)
我弄清楚出了什么问题:在我的find_module中,我总是返回我的导入器,这有效地阻止了绝对导入的发生。