python模块可以确定其文件名,或者它被导入的内容是什么?

时间:2016-11-24 09:54:25

标签: python module python-import

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

import sys
name = sys.argv[0]

我的问题是,导入模块中的代码可以执行相同的操作吗?我使用的是python 3.5。

我正在编写一个大型程序,为了方便和可扩展性,它被分成一个主要部分和“附加组件”,就像Audacity一样。我试图让扩展和DRY变得简单,只需将一个附加模块添加到程序目录中,主程序就可以将其拾取并使用它。我使用命名标准,其中模块文件名被赋予特定于程序的前缀以识别它们,然后在其中实现一些标准命名的类和数据。

由于主程序没有提前知道附加组件的名称,我这样导入它们,这似乎工作正常

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)

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

显然,当启动对象时,我也可以传递mod_ID,但这很像魔术师被发现将兔子放入帽子。

如果模块中有任何参数使其文件名可供自己访问?

1 个答案:

答案 0 :(得分:0)

(代表OP发布)

咄!这是___ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <