python 模块能否确定其文件名或导入的文件名?

Can a python module determine its filename, or what it's been imported as?

我已经知道一个python程序可以确定它的文件名,我见过最直接的就是这个

import sys
name = sys.argv[0]

我的问题是导入模块中的代码可以做同样的事情吗?我正在使用 python 3.5.

我正在编写一个大型程序,为了方便和可扩展性,它被分成一个主要部分,'add-ons',就像 Audacity 一样。我试图使其易于扩展和干燥,从而将附加模块简单地添加到程序目录中,主程序可以选择并使用它。我使用的是命名标准,其中模块文件名被赋予程序特定的前缀以识别它们,然后在内部实现一些标准命名的 类 和数据。

因为主程序不知道加载项的名称,所以我是这样导入的,貌似还可以

def get_available_modules(self, prefix=""):
    """ import the files named prefix_xxx.py in this folder """

    files = os.listdir(os.getcwd())
    self.modules = {}

    for file_name in files:
        # print('examining ', file_name)
        if file_name.startswith(prefix):
            # print('this one looks OK ', file_name)
            # strip the .py off the end
            mod_name = file_name[:-3]
            # strip prefix off the front
            mod_ID = mod_name[len(prefix):]

            self.modules[mod_ID] = __import__(mod_name)

    # print('loaded modules ')
    # for name in self.modules:
        # print(name)

获得模块后,我就可以访问它们的功能,将它们的描述放入列表框或菜单中,实例化并显示它们的控制面板,并将它们指向它们需要处理的资源。但是,为了调试自我一致性,我希望模块能够确定它的名称,文件名是什么。我将通过编辑以前的功能来创建新功能,并且我知道我不会一贯地更改所有内容

显然,当点燃物体时,我也可以将 mod_ID 传入,但这就像发现魔术师将兔子 放入 帽子中。

模块中是否有任何参数可以使其文件名可供自身访问?

(代表OP发表).

呸!它是 ____name____(那是 dunder 名称 dunder,真正的 dunder 与格式混淆!