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

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

  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 技术论坛

  • 18
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python项目目录结构可以根据个人或团队的需求进行灵活的设计,但也有一些得到共识的目录结构可以参考。一个较好的Python工程目录结构可以包含以下几个目录和文件: 1. bin/: 存放项目的一些可执行文件,例如脚本文件。也可以使用其他命名,比如script/等等。 2. foo/: 存放项目的所有源代码。所有的模块和包都应该放在这个目录下,不要置于顶层目录。此目录下的子目录tests/可以用于存放单元测试代码。通常,项目的入口文件可以命名为main.py。 3. docs/: 存放一些文档,可以包括项目的说明文档、API文档或其他相关文档。 4. setup.py: 用于项目的安装、部署和打包的脚本。 5. requirements.txt: 存放项目所依赖的外部Python包的列表。这个文件可以简化项目的依赖管理。 6. README: 项目的说明文件,可以包含项目的简介、使用方法、贡献指南或其他相关信息。 这只是一个较好的Python工程目录结构的示例,实际上可以根据项目的具体需求进行适当的调整和扩展。在实际的项目中,还可以根据需要添加其他目录和文件,比如数据文件、配置文件等。重要的是要保持目录结构的清晰和有组织性,以便于团队成员的协作和维护。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python 项目目录结构](https://blog.csdn.net/qq_21467113/article/details/86541268)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [python工程 目录结构 结构化你的工程](https://blog.csdn.net/erfan_lang/article/details/120528090)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值