对于一个代码项目,好的目录结构是必不可少的。

我们为什么需要设计好的目录结构?

好的目录结构,意味着好的 可读性可维护性

  • 可读性好:刚接触项目的人,一眼就能看懂目录结构,知道哪里是 源码,哪里是 配置文件,哪里是 文档,从而能够非常快速的了解这个项目
  • 可维护性好:维护者能够很明确地知道,新增的文件跟代码应该放到什么目录,随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好。

我们应该如何对项目目录合理地进行组织?

组织一个良好的项目目录其实不难。你并不需要从零开始造轮子,已经有人总结出了一些不错的目录结构并得到了大家的广泛共识,你只要能够理解其思想,会使用就够了。


项目目录结构的简单模板

假设你的项目名为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每个项目都应该有的一个文件,作用是能够 简要描述该项目的信息,让读者快速了解这个项目

它最好能够说明以下几个事项:

  1. 软件定位,软件的基本功能。
  2. 运行代码的方法: 安装环境、启动命令等。
  3. 简要的使用说明。
  4. 代码目录结构说明,更详细点可以说明软件的基本原理。
  5. 常见问题说明。

可以参考Redis源码中Readme的写法,这里面简洁但是清晰的描述了Redis功能和源码结构。

https://github.com/antirez/redis#what-is-redis

依赖包 requirements.txt 和 setup.py

配置文件 config

很多项目对配置文件的使用做法是:

  1. 配置文件写在一个或多个python文件中,比如此处的conf.py。
  2. 项目中哪个模块用到这个配置文件就直接通过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 项目目录结构相关推荐

  1. Python开源项目目录结构参考

    python开源项目目录结构参考 转载:http://www.cnblogs.com/holbrook/archive/2012/02/24/2366386.html 原作者:心内求法 每个真正的程序 ...

  2. python项目结构图_python 项目目录结构设置

    为项目设置目录结构是为了将功能类似的文件放置在同一目录内,增强项目的可读性和可维护性.如果一个python项目功能单一,代码量很小,那就没必要设置的这么复杂. 下图是一个示例项目的目录结构: 1,bi ...

  3. python:软件目录结构规范

    为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 1.一种认为,这种个人风 ...

  4. 最全的 eclipse web 项目目录结构

    本文会尽可能对 java web 项目的目录结构做出最详细的解释,尽量做到浅显易懂. eclipse web 项目目录结构 java web 项目事例 03-springmvc-drien-xgq 是 ...

  5. Java项目目录结构与解析

    一个正规的Java项目目录结构首先要清晰. 所以打包的结构就很关键. 如上图所示: bean层 : 放置数据的类 client层 : 放置与用户交互的代码 dao层: 访问数据库层 dao.util层 ...

  6. angular 标准目录结构_Angular-cli新建项目目录结构详解

    Angular-cli新建项目目录结构详解 在上一篇博客中我们已经通过Angular CLI命令行工具创建出来一个全新的Angular项目,要想写项目,首先我们要先搞清楚项目的目录结构是怎样的,每个文 ...

  7. 1-5Tomcat 目录结构 和 web项目目录结构

    对应我的安装路径: web项目目录结构 转载于:https://www.cnblogs.com/huiziz/p/5671612.html

  8. Spring boot 项目目录结构详解

    对SpringBoot项目目录进行分层显示能够使我们的开发思路更加的明确,代码内容更加清晰易懂,下面向大家讲解一下项目目录结构. 代码层的结构 根目录:com.springboot 1.工程启动类(A ...

  9. Angular4.x 安装|创建项目|目录结构|创建组件

    Angular4.x 安装|创建项目|目录结构|创建组件 安装最新版本的 nodejs node.js 官网:https://nodejs.org/zh-cn/ 去官网下载 node.js,下一步下一 ...

最新文章

  1. 原创,自己做的一个简单实用的提示小插件,兼容性很好,基本上都兼容!
  2. Eclipse 自动注释的设置
  3. SharePoint2013 备份还原
  4. 【Keras】30 秒上手 Keras+实例对mnist手写数字进行识别准确率达99%以上
  5. 如何识别一个人是web前端程序员
  6. 从教科书式的失败到手术刀式的自救,李宁找回了“李宁”!
  7. 使用UltraISO制作LINUX安装U盘(未成功)
  8. 人人商城-人人社区数据字典(数据表)
  9. linux设置挂载服务端防火墙_「rpcbind」Linux下nfs+rpcbind实现服务器之间的文件共享(mount 挂载) - seo实验室...
  10. 峰值性噪比matlab,PSNR峰值信噪比matlab实现
  11. 【日常点滴015】python中学完pandas后的代码练习 附源数据文件
  12. 2022自动驾驶商业化落地,主流将是什么?丨曼孚科技
  13. 使用迅雷9.1.48从ftp服务器下载文件
  14. java爬小说_java爬虫实战开发小说网站
  15. 设置PPT幻灯版自动翻页播放
  16. Jenkins Pipeline 一键部署SpringBoot项目
  17. webpack优化系列七:首屏加载优化
  18. Prometheus+Grafana监控告警配置
  19. 数据结构-广义表详解(类C语言版)
  20. 修改latex表格内容无衬线字体

热门文章

  1. 如何准备软件工程师的面试
  2. parted分区工具
  3. 美国俚语(11-15)
  4. JAVA面试题--分布式(最新最全)
  5. 道易行闪耀天津展——现场红包开抢火热
  6. js 汉字转化拼音
  7. 合理的估算线程池的大小
  8. Burp Suite-第八章 如何使用Burp Intruder
  9. 手把手教你完成贪吃蛇的编写(Python)
  10. Android_RecyclerView实现上下滚动广告条(带图片)