python导入钩子:在处理之前访问完整的虚线模块名

2024-09-30 16:38:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我明白进口商协议是在个别进口的水平上运作的。然而,在我的例子中,如果我能在一次完全体验一个路径元素之前知道完整的“点式模块名”(如果允许的话,就是“一个先验的”)从我的导入钩子中完全体验它,这将非常有帮助。在

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包生成的,看看它能提供什么;我不会在这里输入实现的详细信息:

^{pr2}$

我的问题在于

import perlmod.www.mechanize

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

import perlmod.www

在加载了一个www存根包之后,我没有机会回来说“等等,等等,这是错误的”。我的钩子在那之后就不会再叫了。在

基本上,当我的导入钩子被调用为“www”时,我必须已经知道对于完整的虚线模块名,导入是失败还是成功。我就到此为止,详细说明一下,请不要忘记真正的问题:)

非常感谢你,即使只是因为你读了这篇文章。在


Tags: 模块toimportself信息defwww钩子