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 与格式混淆!
我已经知道一个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 与格式混淆!