如何在Python3.x中获取尝试导入当前模块(模块的第一次导入)的模块名称?
例如:有两个文件如何在Python3.x中获取尝试导入当前模块(模块的第一次导入)的模块名称?,python,python-3.x,python-import,Python,Python 3.x,Python Import,例如:有两个文件 a、 派克 b、 派克 问题: 是否可以找出在另一个模块上进行首次导入的模块的名称 附言: 像导入补丁一样不是一个选项b.py可以单独导入到第三方模块中。在b.py文件中添加以下代码,然后您将获得导入b.py的文件的名称 import sys, os def getCalledModuleName(): try: sFile = os.path.abspath(sys.modules['__main__'].__file__) name
a、 派克 b、 派克 问题: 是否可以找出在另一个模块上进行首次导入的模块的名称 附言:
像导入补丁一样不是一个选项
b.py
可以单独导入到第三方模块中。在b.py文件中添加以下代码,然后您将获得导入b.py的文件的名称
import sys, os
def getCalledModuleName():
try:
sFile = os.path.abspath(sys.modules['__main__'].__file__)
names = sFile.split('\\')
length = len(names)
name = names[length-1]
except:
sFile = sys.executable
names = sFile.split('\\')
length = len(names)
name = names[length - 1]
return name
if __name__=='__main__':
print('Main Function Called')
else:
print('Imported as Module')
print(getCalledModuleName())
这是完全错误的。它获取两个名称中的一个,这两个名称与导入当前模块的模块无关,并且很可能根本不是程序中任何模块的名称。它只返回
root
可执行源的名称。@YuriyLeonov yes它将返回根可执行源。您还可以使用sFile获取该根文件的路径。我只是分割了整个路径并只返回文件名。但是,例如,如果模块不是通过根导入的
模块导入的,则此cose不起作用,我没有检查它。我刚查过我写给你的信。只显示调用文件名。
print('???') # here I want to figure out which module called me
# this module could be imported from different modules/places not even from expected places.
# there is no certain purpose to use such information, just try to find out is it possible.
import sys, os
def getCalledModuleName():
try:
sFile = os.path.abspath(sys.modules['__main__'].__file__)
names = sFile.split('\\')
length = len(names)
name = names[length-1]
except:
sFile = sys.executable
names = sFile.split('\\')
length = len(names)
name = names[length - 1]
return name
if __name__=='__main__':
print('Main Function Called')
else:
print('Imported as Module')
print(getCalledModuleName())