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

Python多层级项目无法通过sys.path实现跨目录导入问题求解

可行的Python项目导入方案

第一步:规范包结构

先在所有层级的目录下新增空的__init__.py文件,需要添加的目录包括:

  • 顶层App目录
  • Core目录
  • Core/Controllers目录
  • Core/Controllers/Components目录
  • Core/Controllers/Components/Elements目录
  • Core/DTO目录
  • Config目录
  • DB目录
  • Util目录
    添加完成后Python会将整个项目识别为可导入的标准包结构,不需要额外的sys.path路径添加操作,你之前在Components的__init__.py中加的__import__批量导入、sys.path.append逻辑都可以直接删除。

分场景导入写法(全部使用相对导入,完全符合需求)

场景1:Elements目录下同文件互导

比如AB.py导入同目录AA.py的aa类:

from .AA import aa

场景2:Elements目录导入Core/DTO下的类

比如导入H.py的h类:
Elements目录到Core目录需要向上跳3级,写法为:

from ...DTO.H import h

注:每一个.代表向上跳转一级目录,...等价于向上跳转3级到Core目录,再指向同级的DTO目录

场景3:Elements目录导入Config、DB、Util下的文件

这三个目录和Core同级,都在App根目录下,Elements目录到App根目录需要向上跳4级:

  • 导入Config/E.py的对应类:from ....Config.E import 你的类名
  • 导入DB/db.py的db实例:from ....DB.db import db
  • 导入Util/utils.py的工具方法:from ....Util.utils import 你需要的函数/类
    其他层级的文件导入utils.py只需要调整相对路径的点数量即可,比如Core/DTO下的文件导入utils:from ...Util.utils import xxx

注意事项

  1. 导入语句的目录名必须和实际目录大小写完全一致,Python导入大小写敏感,你之前写的from app.DB.db import db大小写和实际的App目录不符,必然报错。
  2. 不要直接运行包内的单个Python文件(比如直接执行python AB.py),直接运行的文件会被识别为入口脚本,不属于包结构的一部分,会导致相对导入失效。如果需要测试Elements下的文件功能,在App目录的同级目录执行模块运行命令即可,比如测试AB.py:
python -m App.Core.Controllers.Components.Elements.AB
  1. 如果项目有统一启动入口,把入口文件放在App目录的同级位置,直接从入口启动即可正常识别所有相对导入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:24:05