python import hooks:在处理之前访问完整的虚线模块名称

时间:2011-03-31 10:33:03

标签: python

我理解进口商协议在个别进口水平上运作的事实。但是,在我的情况下,如果我能够在完全体验到一个路径元素之前知道完整的“虚线模块名称”,那将是非常有用的(也就是说,如果我被允许这么说的话,那就是“先验”)。 import hook。

class myimporter(object):
    def find_module(self,fullname,path=None):
        if fullname == 'rootnamespace':
            #at this moment I need to know the full dotted module name
            #that I am going to process (e.g. rootnamespace.foo.bar.baz)

    def load_module(self,fullname):
         pass

有没有办法(希望安全和健全)事先知道导入钩子中的完整“虚线模块名称”?


---更多的信息,可能不是真的需要(所以你可以直接跳过回答我;)),但是:

如果读者想知道为什么我需要它,或者只是更多信息是有用的:我想在python中导入perl模块。这听起来有多奇怪? :)实际上,导入过程只会为perl模块提供python存根。通过内省perl包生成存根,看看它提供了什么;我不会在这里输入实施细节:

import perlmod.www.mechanize as wwwmech
mymech = wwwmech() #return a python proxy object to be used with later calls
mymech.get(uri) #returns another proxy object to the newly generated HTTP::Response perl object
#etc etc

我的问题在于

import perlmod.www.mechanize

因为我需要事先知道所请求的模块是否真的存在于系统的perl安装中,而不是被迫等待完整的模块名称所以我可以决定是否应该失败。此外,如果用户执行:

import perlmod.www

加载www存储包后,我没有机会回来说“等待等待,这是错误的”。之后我的钩子不会被调用。

基本上,当我为“www”调用我的导入钩子时,我必须已经知道导入是否会失败或是否成功完成虚线模块名称。我将在此处详细说明,请不要忘记真正的问题:)

非常感谢,甚至只是为了阅读本文。

0 个答案:

没有答案