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. 包目录下还必须有1个__init__.py文件,(参考 Python项目中的 init.py的作用及内容 )n
  2. python实现代码 .py文件。

4) test目录

主要保存测试文件,都是test开头文件。

3. 再简化:命令行式项目的结构

对于1个非常简单的程序 ,还可以简化为如下形式

sample/
├── .gitignore
├── LICENSE
├── README.rst
├── requirements.txt
├── sample.py
├── setup.py
└── test_sample.py
  1. 带子应用的项目结构

如果项目功能较多,有几个开发者,可以把项目拆分,分成几个子包来开发。在 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

说明:

  1. 子包目录的sample.py, __init__.py文件内容分别如下:
 # sample.py文件def demo():return "this is a demo function"# __init__.py 文件
from .sample import demo
# 或者 from sample import *
  1. 在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项目的项目结构及代码组织最佳实践相关推荐

  1. Java Web应用的代码分层最佳实践

    转载自 Java Web应用的代码分层最佳实践 代码分层,对于任何一个Java Web开发来说应该都不陌生.一个好的层次划分不仅可以能使代码结构更加清楚,还可以使项目分工更加明确,可读性大大提升,更加 ...

  2. 前端代码标准最佳实践:HTML篇

    Web前端代码中,HTML是根本,CSS和JavaScript也是围绕着既有的HTML结构来构建,所以良好的HTML代码结构,除了提高了HTML代码的可读性,可维护性和执行性能之外,也可以让相对应的C ...

  3. 前端代码标准最佳实践:javascript篇

    2019独角兽企业重金招聘Python工程师标准>>> 前言 最近一直重构项目的前端代码,也参考了各种前端代码的最佳实践,目的是让前端的HTML,CSS,Javacript代码更符合 ...

  4. 编写高性能Java代码的最佳实践

    编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...

  5. 前端代码标准最佳实践:CSS篇

    上一篇<前端代码标准最佳实践:javascript>发表后,大家讨论还是很热烈,从侧面体现了前端工程师对写标准的前端代码的重视程度很高.这些最佳标准实践并不是那个权威组织发布的,而是由大量 ...

  6. 升级遗留代码的最佳实践

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 在传统企业甚至互联网企业中往往存在大量的遗留代码,这些遗留代码大多都能够正常工作,有的可能还运行着 ...

  7. 高性能Java代码的最佳实践

    高性能Java代码的最佳实践 前言 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法.我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定 ...

  8. Spotfire在文本区域添加自定义JavaScript代码的最佳实践

    这边文章包含了如何在TIBCO Spotfire分析文件的文本区域中以一种可支持和可维护的方式来开发自定义JavaScript代码的最佳实践和建议,因此,这些分析文件将持续与TIBCO Spotfir ...

  9. python实现struct_Python实现结构体代码实例

    这篇文章主要介绍了python实现结构体代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # python 使用类创建结构体 class My ...

最新文章

  1. vscode 无法跳转到函数定义_玩转VS Code
  2. 【Transformer】Augmented Shortcuts for Vision Transformers
  3. 论文浅尝 | 多内容实体和关系联合抽取的对抗训练
  4. SpringBoot获取配置文件常量值
  5. linux32位运行64位程序,32位windows下可以运行的程序在64位linux下报错
  6. Win10远程桌面 出现 身份验证错误,要求的函数不受支持,这可能是由于CredSSP加密Oracle修正 解决方法
  7. viiv个人计算机,欢娱尽情 欢跃平台PC导购
  8. 【我的OpenGL学习进阶之旅】Assimp库支持哪些3D模型格式?
  9. Python知识点之Python进阶
  10. Sketch56.1汉化
  11. 贝尔曼算法队列优化(SPFA)
  12. Shell脚本三种循环
  13. io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流
  14. 安卓逆向013之DDMS去广告(车来了)
  15. 互联网快讯:快手启动“新锐品牌计划;猿辅导、掌门教育布局素质教育
  16. 【总结向】从CMRC2019头部排名看中文MRC
  17. CryEngine的Modular Behavior Tree简介
  18. 史上最全面试题(CSS)
  19. [整理]程序员一生必读的30本书
  20. 闪光灯 flash 问题

热门文章

  1. csol怎么设置屏蔽服务器信息,CSO常用技巧之控制台参数修改
  2. 培训:3天带你快速上手Kubernetes
  3. python 爬取财经新闻_金融财经新闻的文本爬取
  4. Windows10桌面图标变白解决方案
  5. Java-循环语句 控制跳转语句及方法(函数)
  6. android5.1 nfc,一加5有NFC吗?一加手机5支持NFC功能吗?
  7. Windows 10 系统安装教程(本地安装)
  8. 知识点滴 - 中国有多少省,简称是什么
  9. 33岁的大龄女青年真的很难嫁了吗?
  10. 【图文详细 】Scala——编程练习