如何在导入的文件中找到作为导入程序的文件的名称?

时间:2009-09-21 22:56:32

标签: python import

如何在导入的文件中找到作为“导入程序”的文件的名称?

如果a.pyb.py都导入c.py,那么c.py是否可以知道导入文件的名称?

4 个答案:

答案 0 :(得分:2)

这就是你有参数的原因。

确定是谁导入它不是c.py的工作。

a.pyb.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.pyb.py)传入c.py的名称? (假设您控制了a.pyb.py

答案 3 :(得分:1)

使用

的sys.path [0]

返回启动python解释器的脚本的路径。如果你可以直接使用这个脚本,它将返回脚本的路径。但是,如果脚本是从另一个脚本导入的,则它将返回该脚本的路径。

请参阅Python Path Issues