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

Python多模块项目最优目录结构及无路径修改调用方案咨询

Python跨模块导入的规范实现方案

整理后的目录结构

project/
├── src/
│   └── main.py
├── mod_a/
│   └── mod_a_func.py
└── mod_b/
    ├── mod_b_func.py
    └── mod_b_helper/
        └── helper.py

问题分析

你当前通过修改sys.path实现模块导入的做法不符合Python规范编码风格——硬改sys.path会降低代码可移植性,换个环境或执行路径就可能报错。

无需修改路径的规范实现方法

方法1:切换到根目录执行(推荐)

直接在project目录下运行main.py,Python会自动把project目录加入模块搜索路径:

cd project
python src/main.py

对应代码调整:

  • main.py直接写:
    from mod_a import mod_a_func
    from mod_b import mod_b_func
    
  • mod_b_func.py保留原有相对导入:
    from .mod_b_helper import helper
    
  • 给mod_a、mod_b、mod_b_helper目录各添加一个空的__init__.py文件,让它们成为合法的Python包。

方法2:模块模式运行(适合必须在src目录执行的场景)

如果一定要在src目录下执行,可通过Python的-m参数以模块方式启动,同时把src也转为包:

  1. 给src目录添加一个空的__init__.py;
  2. 在project目录下执行:
    python -m src.main
    
  3. main.py改用相对导入:
    from ..mod_a import mod_a_func
    from ..mod_b import mod_b_func
    

mod_b_func.py里的相对导入无需修改。

关键注意事项

  • 所有作为包的目录建议包含__init__.py(Python 3.3+支持无此文件的命名空间包,但显式添加兼容性更好);
  • 避免直接修改sys.path,这是不规范的“投机”做法,会埋下路径冲突隐患。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:05:09