各类Python项目的项目结构及代码组织最佳实践
1. 了解Python项目文件组织结构非常重要
为什么要掌握pythob项目结构?
- 优秀的程序员都使用规范的项目代码结构,了解这些好的习惯方式,能帮助你快速读懂代码
- 如果项目是几个人合作开发,好的代码结构,便于分工,减少混乱,使项目开发过程更顺畅。
本文将为您介绍: 项目结构预备知识,基本项目结构 ,带多个子包的项目结构,Flask项目结构,机器学习项目结构等常见类型的项目结构,有疑问,欢迎留言
预备知识:Package包, Module模块与 fiile文件的关系
Package(包), Module(模块), file(文件) 三者关系,
Package由模块组成
包含功能代码的.py 代码文件也称为 module 模块, 但不能把 config.py , __init__.py
称为模块。
预备知识: 包与目录的关系
虽然在形式上,可以把1个包理解为1个目录,但并非是包含代码的目录都是包,
二者区分的关键是, 包目录包含 __init__.py
文件,不包含此文件的不能称之为包目录。
2. 应用最广泛的 python 项目结构的基本形式
本文介绍的python项目结构适合于中小型项目, 应用非常广泛,初学者应该养成好习惯,一开始就用这种方式来组织自己的代码。
假设新建项目的名称为 myproject, 可以在windows或 linux终端, 创建如下项目结构
└─myproject │ .gitignore │ LICENSE │ readme.md │ requirements.txt │ setup.py │ ├─myproject │ main.py │ util.py │ __init__.py │ └─test test_main.py
说明如下:
1) 项目根目录与包目录的区分
第1层 myproject 是项目根目录,第2级 myproject是包目录,为什么这样组织,主要是基于好的实践经验,项目根目录主要用于存放配置,手册,启动文件等。 而主要功能都放在package包中,Pythton包的具体组织形式就是1个子目录,由于是基本项目,功能不多,只有1个包,因此用项目同名做为包名,所有实现代码放在 ·myproject/myproject· 目录下。
2) 项目根目录
主要有几类文件:
- setup.py 文件, 这是要安装的包信息
- 项目说明, readme.md , readme.rst 等。
- requirements.txt, 第3方依赖库列表
- License, 许可说明文件
- .gitignore 如果使用git 做为仓库,这个文件说明哪些文件不上传
3) 包目录
包目录下主要有:
- 包目录下还必须有1个
__init__.py
文件,(参考 Python项目中的 init.py的作用及内容 )n - python实现代码 .py文件。
4) test目录
主要保存测试文件,都是test开头文件。
3. 再简化:命令行式项目的结构
对于1个非常简单的程序 ,还可以简化为如下形式
sample/├── .gitignore├── LICENSE├── README.rst├── requirements.txt├── sample.py├── setup.py└── test_sample.py
- 带子应用的项目结构
如果项目功能较多,有几个开发者,可以把项目拆分,分成几个子包来开发。在 myproject的主包目录下创建子包目录
└─myproject │ .gitignore │ LICENSE │ readme.md │ requirements.txt │ setup.py │ ├─myproject │ │ main.py │ │ util.py │ │ __init__.py │ │ │ ├─app_sample │ │ │ sample.py │ │ │ __init__.py │ │ │ │ │ └─__pycache__ │ │ sample.cpython-39.pyc │ │ __init__.cpython-39.pyc │ │ │ └─__pycache__ │ main.cpython-39.pyc │ __init__.cpython-39.pyc │ └─test test_main.py
说明:
- 子包目录的
sample.py
,__init__.py
文件内容分别如下:
# sample.py文件 def demo(): return "this is a demo function"# __init__.py 文件from .sample import demo # 或者 from sample import *
- 在myproject/main.py中
from app_sample import *def main(): return "main test"print(main())print(demo())
输出为:
main test
this is a demo function
也可以这样导入 sameple.py 中demo函数
from app_sample.sample import demo
4. Flask 项目结构
与django有项目结构生成工具不同,Flask 项目结构需要自己来构建, 1个结构良好的项目结构形式,要考虑子应用隔离,模型,模板文件、静态文件等路径,
下面是推荐的 Flask项目结构:
flaskr-tutorial/├── flaskr/│ ├── ___init__.py│ ├── db.py│ ├── schema.sql│ ├── auth.py│ ├── blog.py│ ├── templates/│ │ ├── base.html│ │ ├── auth/│ │ │ ├── login.html│ │ │ └── register.html│ │ └── blog/│ │ ├── create.html│ │ ├── index.html│ │ └── update.html│ └── static/│ └── style.css├── tests/│ ├── data.sql│ ├── test_auth.py│ ├── test_blog.py│ ├── test_conf.py│ ├── test_db.py│ └── test_factory.py├── venv/├── .gitignore├── setup.py└── MANIFEST.in
5. 机器学习项目结构
机器学习项目是python应用的重要方向,此类项目的特点是,需要有源数据、算法模型目录(注意不是django, flask 的模型),生产环境通常还需要集成 Flask 提供web服务,典型的项目结构如下:
sample/├── data/│ ├── external/│ ├── interim/│ ├── processed/│ └── raw/├── models/├── notebooks/├── sample/│ ├── data/│ ├── features/│ └── model/├── tests/├── .gitignore├── LICENSE├── README.rst├── requirements.txt└── setup.py
总结
本文描述的python最流行的基本项目结构形式,后续继续给大家介绍,多应用项目,web项目,AI类应用项目结构的建议。
来源地址:https://blog.csdn.net/captain5339/article/details/128017400
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341