Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python3.x中获取尝试导入当前模块(模块的第一次导入)的模块名称?_Python_Python 3.x_Python Import - Fatal编程技术网

如何在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())