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

Python如何通过相对路径跨文件夹导入模块(不修改sys.path)

Python跨文件夹相对导入实现方案

第一步:规范包目录结构

Python相对导入依赖正式的包结构识别,首先需要在每个包目录下添加空的__init__.py文件(Python 3.3+支持隐式命名空间包,但添加空文件可以兼容所有版本、避免识别异常),调整后的完整目录结构如下:

- relative_imports/  # 项目根包目录
    - __init__.py  # 空文件即可
    - folder1/
        - __init__.py  # 空文件即可
        - file1.py
            - class one_1(): ...
            - class one_2(): ...
        - file2.py
            - class two_1(): ...
            - class two_2(): ...
    - folder2/
        - __init__.py  # 空文件即可
        - file3.py

第二步:编写相对导入代码

在file3.py中使用标准相对导入语法:单个.代表当前文件所在目录,两个..代表当前目录的父级目录。由于folder1和folder2同属relative_imports包下的同级子目录,需要从父级包索引目标模块,导入代码如下:

# file3.py 内容
from ..folder1.file1 import one_1, one_2
from ..folder1.file2 import two_1, two_2

# 测试逻辑
if __name__ == "__main__":
    val1 = one_1()
    val2 = one_2()
    val3 = two_1()
    val4 = two_2()
    print("所有类导入、实例化成功")

第三步:用正确方式运行脚本(核心易错点)

相对导入失败90%以上的原因是运行方式错误:不能直接进入folder2目录执行python file3.py,这种模式下Python会把file3.py当做独立顶层脚本,无法识别它所属的包层级,会抛出attempted relative import with no known parent package错误。

正确运行步骤:

  1. 终端切换到relative_imports文件夹的上一级目录(即当前路径下能直接看到relative_imports文件夹的层级)
  2. 用-m参数以模块模式执行脚本,命令如下:
python -m relative_imports.folder2.file3

注意事项

  • 不需要修改sys.path,所有导入逻辑完全基于文件相对位置实现
  • __init__.py不需要写任何内容,仅作为包识别标识存在
  • 之前尝试的from relative_imports.folder1.file1 import one_1属于绝对导入写法,直接运行file3.py时,Python的模块搜索路径默认是脚本所在的folder2目录,找不到顶层的relative_imports包,因此导入失败
  • 包内的脚本不要直接通过文件路径运行,必须使用-m参数按模块路径调用,这是Python官方推荐的包内脚本运行方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:03:23