如何在导入的文件中找到作为“导入程序”的文件的名称?
如果a.py
和b.py
都导入c.py
,那么c.py是否可以知道导入文件的名称?
答案 0 :(得分:2)
这就是你有参数的原因。
确定是谁导入它不是c.py
的工作。
a.py
或b.py
的工作是将变量__name__
传递给c.py
中的函数或类。
答案 1 :(得分:1)
在c.py的顶层(即任何函数或类之外),您应该能够通过运行
获取所需的信息import traceback
然后检查traceback.extract_stack()的结果。在运行顶级代码时,模块的导入程序(及其导入程序等递归)都在callstack上。
答案 2 :(得分:1)
可以通过inspecting堆栈来完成:
#inside c.py:
import inspect
FRAME_FILENAME = 1
print "Imported from: ", inspect.getouterframes(inspect.currentframe())[-1][FRAME_FILENAME]
#or:
print "Imported from: ", inspect.stack()[-1][FRAME_FILENAME]
但检查堆栈可能有问题。为什么你需要知道从哪里导入文件?为什么不将导入文件(a.py
和b.py
)传入c.py
的名称? (假设您控制了a.py
和b.py
)
答案 3 :(得分:1)
使用
的sys.path [0]
返回启动python解释器的脚本的路径。如果你可以直接使用这个脚本,它将返回脚本的路径。但是,如果脚本是从另一个脚本导入的,则它将返回该脚本的路径。