Python 从另一个模块导入逻辑时,如何保留中间人文件的名称

Python 从另一个模块导入逻辑时,如何保留中间人文件的名称,python,module,Python,Module,是否有一种方法可以使用导入的函数检索中间人模块的名称 在同一工作目录中: top_level.py: execfile('./middle_module.py') # output of get_filename() is base_module.pyc execfile('./middle_module.py') # output of get_filename() is now middle_module middle_module.py: import base_module base

是否有一种方法可以使用导入的函数检索中间人模块的名称

在同一工作目录中:

top_level.py:

execfile('./middle_module.py')
# output of get_filename() is base_module.pyc
execfile('./middle_module.py')
# output of get_filename() is now middle_module
middle_module.py:

import base_module
base_module.get_filename() # how can I get this to be middle_module.py?
def get_filename():
    print(__file__)
import base_module
base_module.get_filename() # refrences middle_module now
import sys
import inspect
# get name of process one stack level above
def get_filename():
    print inspect.getfile(sys._getframe(1))
base_module.py:

import base_module
base_module.get_filename() # how can I get this to be middle_module.py?
def get_filename():
    print(__file__)
import base_module
base_module.get_filename() # refrences middle_module now
import sys
import inspect
# get name of process one stack level above
def get_filename():
    print inspect.getfile(sys._getframe(1))
编辑:我希望避免使用CL参数,因为这需要与平台无关。

在这里找到了答案:

top_level.py:

execfile('./middle_module.py')
# output of get_filename() is base_module.pyc
execfile('./middle_module.py')
# output of get_filename() is now middle_module
middle_module.py:

import base_module
base_module.get_filename() # how can I get this to be middle_module.py?
def get_filename():
    print(__file__)
import base_module
base_module.get_filename() # refrences middle_module now
import sys
import inspect
# get name of process one stack level above
def get_filename():
    print inspect.getfile(sys._getframe(1))
base_module.py:

import base_module
base_module.get_filename() # how can I get this to be middle_module.py?
def get_filename():
    print(__file__)
import base_module
base_module.get_filename() # refrences middle_module now
import sys
import inspect
# get name of process one stack level above
def get_filename():
    print inspect.getfile(sys._getframe(1))

可能重复您为什么使用execfile?@user2357112,因为我想明确指出,
top\u level
只是将多个中间模块链接在一起。导入中间模块意味着它们有一些不真实的功能,因为中间模块当前都在运行非适应性代码。