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

Python 3.10如何通过相对路径导入并调用其他py文件的函数?

相对路径导入Python函数的正确方法

你遇到的ModuleNotFoundError是因为Python的导入系统只会在sys.path列表中的目录里查找模块,你仅构造了TEST2.py的文件路径,但未将其所在目录加入sys.path,也未遵循Python导入规则操作。

先明确目录结构

根据你代码中../TEST2.py的写法,推测实际目录结构为:

├── TEST2.py
└── 子目录/
    └── TEST1.py

即TEST1.py位于子目录,TEST2.py在子目录的父目录中。若为其他结构,可对应调整路径。

方法一:将目标模块所在目录加入sys.path

这是直接运行脚本时最实用的方法:
修改TEST1.py代码如下:

import os
import sys

# 获取TEST1所在目录的绝对路径
current_dir = os.path.abspath(os.path.dirname(__file__))
# 定位到TEST2所在的父目录
target_dir = os.path.abspath(os.path.join(current_dir, '..'))
# 将目标目录加入sys.path,让Python能找到TEST2模块
sys.path.append(target_dir)

import TEST2

if __name__ == '__main__':
    print(TEST2.TEST3())

方法二:组织为Python包(推荐长期项目使用)

如果你的代码属于一个完整项目,推荐将目录结构转为Python包:

  1. 在包含TEST2.py的父目录、TEST1所在的子目录下分别创建空的__init__.py文件,使整个结构成为合法Python包:
├── __init__.py
├── TEST2.py
└── 子目录/
    ├── __init__.py
    └── TEST1.py
  1. 在TEST1.py中使用相对导入:
from .. import TEST2

if __name__ == '__main__':
    print(TEST2.TEST3())

注意:使用相对导入时,不能直接运行TEST1.py,需从包的外部执行python -m 子目录.TEST1来启动脚本,否则会触发“attempted relative import with no known parent package”错误。

若TEST2在TEST1的子目录中

如果目录结构是TEST1在父目录,TEST2在子目录:

├── TEST1.py
└── 子目录/
    └── TEST2.py

可选择以下两种方式:

  • 修改sys.path导入:
import os
import sys

sub_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '子目录'))
sys.path.append(sub_dir)

import TEST2

if __name__ == '__main__':
    print(TEST2.TEST3())
  • 转为包结构后用绝对导入:
from 子目录 import TEST2

if __name__ == '__main__':
    print(TEST2.TEST3())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:53:16