【Python】Python 项目目录结构
对于一个代码项目,好的目录结构是必不可少的。
我们为什么需要设计好的目录结构?
好的目录结构,意味着好的 可读性 和 可维护性,
- 可读性好:刚接触项目的人,一眼就能看懂目录结构,知道哪里是 源码,哪里是 配置文件,哪里是 文档,从而能够非常快速的了解这个项目
- 可维护性好:维护者能够很明确地知道,新增的文件跟代码应该放到什么目录,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好。
我们应该如何对项目目录合理地进行组织?
组织一个良好的项目目录其实不难。你并不需要从零开始造轮子,已经有人总结出了一些不错的目录结构并得到了大家的广泛共识,你只要能够理解其思想,会使用就够了。
项目目录结构的简单模板
假设你的项目名为foo,推荐的、比较方便的目录结构可以是这样,
Foo/
|-- bin/
| |-- foo
|
|-- foo/
| |-- tests/
| | |-- __init__.py
| | |-- test_main.py
| |
| |-- __init__.py
| |-- main.py
|
|-- docs/
| |-- conf.py
| |-- abc.rst
|
|-- setup.py
|-- requirements.txt
|-- README
其中,
- bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。
- foo/: 存放项目的所有源代码。(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。(2) 其子目录tests/存放单元测试代码; (3) 程序的入口最好命名为main.py。
- docs/: 存放一些文档。
- setup.py: 安装、部署、打包的脚本。
- requirements.txt: 存放软件依赖的外部Python包列表。
- README: 项目说明文件。
除此之外,有一些方案给出了更加多的内容。比如LICENSE.txt,ChangeLog.txt文件等,这里没有列出,因为这些东西主要是项目开源的时候需要用到。
项目说明 README
README每个项目都应该有的一个文件,作用是能够 简要描述该项目的信息,让读者快速了解这个项目。
它最好能够说明以下几个事项:
- 软件定位,软件的基本功能。
- 运行代码的方法: 安装环境、启动命令等。
- 简要的使用说明。
- 代码目录结构说明,更详细点可以说明软件的基本原理。
- 常见问题说明。
可以参考Redis源码中Readme的写法,这里面简洁但是清晰的描述了Redis功能和源码结构。
https://github.com/antirez/redis#what-is-redis
依赖包 requirements.txt 和 setup.py
配置文件 config
很多项目对配置文件的使用做法是:
- 配置文件写在一个或多个python文件中,比如此处的conf.py。
- 项目中哪个模块用到这个配置文件就直接通过import conf这种形式来在代码中使用配置。
实例解读
以流行的YOLOv3XmlGenerator
的项目为例,大致的文件目录如下图所示
其中
- README.md 项目介绍,一般包括使用的环境,安装的方法,软件的基本原理、测试数据及常见问题等,越详细越好
- requirements.txt 记录依赖的软件包及对应的版本号,方便读者明确项目使用了哪些Python包,可以使用命令安装所有的依赖包
pip install -r requirements.txt
,另外,可以使用pipreqs
这个工具来生成requirements.txt - setup.py, 安装、部署、打包的脚本。
- docs 文档目录,项目配置文件通常也放在这里,关于项目配置文件,可以看看这篇文章,讲的比较全 https://martin-thoma.com/configuration-files-in-python/
- extras 有时候会使用到一些C/C++库,一般放在这个文件夹里
- scripts 存放脚本文件,比如代码仓库不适合存放很大的二进制文件,这时候可以写个脚本去拉取
- yolov3xmlgenerator 项目源码文件夹,入口文件建议命名为
main.py
,再配上__init__.py文件,另外,单元测试的代码也放在这块
下面的东西主要是项目开源的时候需要用到
- LICENSE 协议文件,可以参考这篇文章 https://www.jianshu.com/p/a57c13631d5e,讲的很详细
- ChangeLog.txt 记录版本发布的release note
- .gitignore 如果使用的是git代码管理工具,表明上传时忽略的文件,如果您使用的是svn,请忽略
参考:
python 软件目录结构规范
Python工程目录结构
[3] 结构化您的工程
5.1. 代码结构 |《Python 最佳实践指南 2018 2018》| Python 技术论坛
【Python】Python 项目目录结构相关推荐
- Python开源项目目录结构参考
python开源项目目录结构参考 转载:http://www.cnblogs.com/holbrook/archive/2012/02/24/2366386.html 原作者:心内求法 每个真正的程序 ...
- python项目结构图_python 项目目录结构设置
为项目设置目录结构是为了将功能类似的文件放置在同一目录内,增强项目的可读性和可维护性.如果一个python项目功能单一,代码量很小,那就没必要设置的这么复杂. 下图是一个示例项目的目录结构: 1,bi ...
- python:软件目录结构规范
为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 1.一种认为,这种个人风 ...
- 最全的 eclipse web 项目目录结构
本文会尽可能对 java web 项目的目录结构做出最详细的解释,尽量做到浅显易懂. eclipse web 项目目录结构 java web 项目事例 03-springmvc-drien-xgq 是 ...
- Java项目目录结构与解析
一个正规的Java项目目录结构首先要清晰. 所以打包的结构就很关键. 如上图所示: bean层 : 放置数据的类 client层 : 放置与用户交互的代码 dao层: 访问数据库层 dao.util层 ...
- angular 标准目录结构_Angular-cli新建项目目录结构详解
Angular-cli新建项目目录结构详解 在上一篇博客中我们已经通过Angular CLI命令行工具创建出来一个全新的Angular项目,要想写项目,首先我们要先搞清楚项目的目录结构是怎样的,每个文 ...
- 1-5Tomcat 目录结构 和 web项目目录结构
对应我的安装路径: web项目目录结构 转载于:https://www.cnblogs.com/huiziz/p/5671612.html
- Spring boot 项目目录结构详解
对SpringBoot项目目录进行分层显示能够使我们的开发思路更加的明确,代码内容更加清晰易懂,下面向大家讲解一下项目目录结构. 代码层的结构 根目录:com.springboot 1.工程启动类(A ...
- Angular4.x 安装|创建项目|目录结构|创建组件
Angular4.x 安装|创建项目|目录结构|创建组件 安装最新版本的 nodejs node.js 官网:https://nodejs.org/zh-cn/ 去官网下载 node.js,下一步下一 ...
最新文章
- 原创,自己做的一个简单实用的提示小插件,兼容性很好,基本上都兼容!
- Eclipse 自动注释的设置
- SharePoint2013 备份还原
- 【Keras】30 秒上手 Keras+实例对mnist手写数字进行识别准确率达99%以上
- 如何识别一个人是web前端程序员
- 从教科书式的失败到手术刀式的自救,李宁找回了“李宁”!
- 使用UltraISO制作LINUX安装U盘(未成功)
- 人人商城-人人社区数据字典(数据表)
- linux设置挂载服务端防火墙_「rpcbind」Linux下nfs+rpcbind实现服务器之间的文件共享(mount 挂载) - seo实验室...
- 峰值性噪比matlab,PSNR峰值信噪比matlab实现
- 【日常点滴015】python中学完pandas后的代码练习 附源数据文件
- 2022自动驾驶商业化落地,主流将是什么?丨曼孚科技
- 使用迅雷9.1.48从ftp服务器下载文件
- java爬小说_java爬虫实战开发小说网站
- 设置PPT幻灯版自动翻页播放
- Jenkins Pipeline 一键部署SpringBoot项目
- webpack优化系列七:首屏加载优化
- Prometheus+Grafana监控告警配置
- 数据结构-广义表详解(类C语言版)
- 修改latex表格内容无衬线字体