You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从被导入文件调用主文件函数?或获取导入方文件目录?

两种可行方案

一、不导入main.py调用里面的函数

直接用Python的inspect模块追踪调用栈,拿到main模块的全局变量就能调用函数了。修改library.py代码如下:

import inspect

def dosumthing():
    # 取调用栈的上一层,也就是main.py调用这个函数的上下文
    caller_frame = inspect.stack()[1]
    main_globals = caller_frame[0].f_globals
    # 直接调用main.py里的saysom函数
    main_globals['saysom']()

⚠️ 注意:这种方式依赖调用层级,如果后续调用关系变了(比如别的脚本也调用dosumthing),可能会出错;另外如果main.py不是作为主程序运行(比如被其他脚本导入),也可能出问题。

二、获取main.py的所在目录

有两种简单的实现方式:

方式1:用inspect模块

import inspect
import os

def dosumthing():
    # 获取主模块的源码文件路径
    main_file_path = inspect.getsourcefile(inspect.main)
    # 提取目录
    main_dir = os.path.dirname(os.path.abspath(main_file_path))
    print("main.py所在目录:", main_dir)

方式2:用sys.argv

import sys
import os

def dosumthing():
    # sys.argv[0]就是启动的主脚本路径
    main_file_path = sys.argv[0]
    main_dir = os.path.dirname(os.path.abspath(main_file_path))
    print("main.py所在目录:", main_dir)

⚠️ 小提醒:如果是在交互式环境里运行main.py,sys.argv[0]可能是空字符串,这时候用inspect的方法更稳妥。

内容的提问来源于stack exchange,提问作者reidisabot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:35:28