为了什么:

说明: 设计目录结构和代码编码风格一样属于个人风格问题,但是规范化能更好的控制程序结构,让程序具有更高的可读性,对于如何组织一个较好的目录结构,在Stackoverflow中几乎达成共识.


目录结构:

说明: 假设你的项目名为app,我比较建议的最方便最快捷的目录结构,如下这样就足够

.
├── app
│   ├── __init__.py
│   ├── main.py
│   └── tests
│       └── __init__.py
├── bin
├── ChangeLog.txt
├── docs
│   └── conf.py
├── LICENSE.txt
├── README
├── requirements.txt
└── setup.py
bin
存放项目中可执行文件
app
存放项目的所有源代码
app/tests
存放运行单元测试代码
doc
存放一些文档
setup.py
安装, 部署, 打包的脚本
requirements.txt
存放软件依赖第三方包,可使用pigar自动检测生成
README
项目说明文件
LICENSE.txt
开源项目协议
ChangeLog.txt
更新修复记录

具体细节:

1. README是每个项目必须应该有的文件,目的是为了让读者快速了解这个项目,应该包括软件定位,基本功能,运行方法,使用说明,目录说明,常见问题等,具体可以参考redis的README文件

2. setup.py用来管理代码的打包,安装,部署,业界标准是使用setuptools管理这些事情,主要目的是为了能够快速便捷的在一台新的机器上将环境装好,代码部署好和程序运行起来,新环境缺少依赖包无法启动问题屡见不鲜,setup.py就可以将这些事情自动化起来,提高效率,减少出错率,复杂的东西自动化,能自动化的东西一定要自动化是一个非常好的习惯

3. requirements.txt方便开发者维护软件的包依赖,将开发过程中新增的包添加进这个列表避免setup.py安装依赖时漏掉,如果手动安装的话pip -r requirements.txt即可快速恢复项目运行环境

4. 如上的conf.py并没有放在源代码目录下,而是放在docs下,强烈不推荐大家把配置写死通过全局import conf导入,这样会使得模块依赖了外部配置单元测试变的困难,程序组件可复用太差,所以更好的方式应该在docs下给一个默认配置,通过main.py启动参数指定一个配置路径来读取配置内容