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_funcmod_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也转为包:
- 给
src目录添加一个空的__init__.py; - 在
project目录下执行:python -m src.main 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
相关产品推荐
相关产品推荐

