各类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│└─testtest_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│└─testtest_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类应用项目结构的建议。
各类Python项目的项目结构及代码组织最佳实践相关推荐
- Java Web应用的代码分层最佳实践
转载自 Java Web应用的代码分层最佳实践 代码分层,对于任何一个Java Web开发来说应该都不陌生.一个好的层次划分不仅可以能使代码结构更加清楚,还可以使项目分工更加明确,可读性大大提升,更加 ...
- 前端代码标准最佳实践:HTML篇
Web前端代码中,HTML是根本,CSS和JavaScript也是围绕着既有的HTML结构来构建,所以良好的HTML代码结构,除了提高了HTML代码的可读性,可维护性和执行性能之外,也可以让相对应的C ...
- 前端代码标准最佳实践:javascript篇
2019独角兽企业重金招聘Python工程师标准>>> 前言 最近一直重构项目的前端代码,也参考了各种前端代码的最佳实践,目的是让前端的HTML,CSS,Javacript代码更符合 ...
- 编写高性能Java代码的最佳实践
编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...
- 前端代码标准最佳实践:CSS篇
上一篇<前端代码标准最佳实践:javascript>发表后,大家讨论还是很热烈,从侧面体现了前端工程师对写标准的前端代码的重视程度很高.这些最佳标准实践并不是那个权威组织发布的,而是由大量 ...
- 升级遗留代码的最佳实践
云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 在传统企业甚至互联网企业中往往存在大量的遗留代码,这些遗留代码大多都能够正常工作,有的可能还运行着 ...
- 高性能Java代码的最佳实践
高性能Java代码的最佳实践 前言 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法.我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定 ...
- Spotfire在文本区域添加自定义JavaScript代码的最佳实践
这边文章包含了如何在TIBCO Spotfire分析文件的文本区域中以一种可支持和可维护的方式来开发自定义JavaScript代码的最佳实践和建议,因此,这些分析文件将持续与TIBCO Spotfir ...
- python实现struct_Python实现结构体代码实例
这篇文章主要介绍了python实现结构体代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # python 使用类创建结构体 class My ...
最新文章
- vscode 无法跳转到函数定义_玩转VS Code
- 【Transformer】Augmented Shortcuts for Vision Transformers
- 论文浅尝 | 多内容实体和关系联合抽取的对抗训练
- SpringBoot获取配置文件常量值
- linux32位运行64位程序,32位windows下可以运行的程序在64位linux下报错
- Win10远程桌面 出现 身份验证错误,要求的函数不受支持,这可能是由于CredSSP加密Oracle修正 解决方法
- viiv个人计算机,欢娱尽情 欢跃平台PC导购
- 【我的OpenGL学习进阶之旅】Assimp库支持哪些3D模型格式?
- Python知识点之Python进阶
- Sketch56.1汉化
- 贝尔曼算法队列优化(SPFA)
- Shell脚本三种循环
- io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流
- 安卓逆向013之DDMS去广告(车来了)
- 互联网快讯:快手启动“新锐品牌计划;猿辅导、掌门教育布局素质教育
- 【总结向】从CMRC2019头部排名看中文MRC
- CryEngine的Modular Behavior Tree简介
- 史上最全面试题(CSS)
- [整理]程序员一生必读的30本书
- 闪光灯 flash 问题