给定导入的模块,如何确定导入路径?

时间:2015-03-24 03:17:48

标签: python python-3.x

我有一个python函数,它将导入的模块作为参数:

def printModule(module):
    print("That module is named '%s'" % magic(module))

import foo.bar.baz
printModule(foo.bar.baz)

我想要的是能够从传递的模块引用中提取模块名称(在本例中为foo.bar.baz)。在上面的示例中,magic()函数是我想要的函数的替身。

__name__通常会起作用,但这需要在传递的模块的上下文中执行,并且我试图仅从对模块的引用中提取此信息。

这里的正确程序是什么?

我所能想到的只是做string(module),然后是一些文本黑客,或者试图将一个函数注入模块,然后我可以调用它返回__name__,并且这些解决方案都不优雅。(我试过这两个,实际上都没有。模块显然可以在string()表示中置换它们的名字,并将一个函数注入模块然后调用它只返回来电者的背景。)

2 个答案:

答案 0 :(得分:1)

__name__属性似乎有效:

def magic(m):
    return m.__name__

答案 1 :(得分:-1)

如果您有一个包含模块名称的字符串,则可以使用pkgutil。

import pkgutil
pkg = pkgutil.get_loader(module_name)
print pkg.fullname

从模块本身

import pkgutil
pkg = pkgutil.get_loader(module.__name__)
print pkg.fullname