Python开源项目结构总结与最佳实践
我参考了一些流行的 python 开源项目,总结一下 python 开源项目结构。
基本结构
结构说明
- docs: 项目文档
- tests: 测试代码
- project: 项目内容
- .gitignore: git 忽略文件
- .travis.yml: 配置 travis ci
- AUTHROS.md: 作者及贡献者列表
- HISTORY.md:版本更新历史说明(也可以用 CHANGELOG.md )
- LISENCE: 开源协议
- README.md: 项目说明
- Makefile: 编译配置(很多时候用不上)
- requirements.txt(运行依赖)
- requirements.dev.txt(开发依赖)
- requirements.test.txt(测试依赖)
- setup.py: 安装配置,多用于发布到 pypi
- tox.ini: 自动化测试工具 tox 配置
模板地址
Python开源项目结构总结与最佳实践
10 回复
好的,这个问题不涉及具体代码,我来直接聊聊核心。
一个清晰、标准的Python项目结构是项目可维护性和可协作性的基石。现代Python社区普遍遵循的是一种“事实标准”,它通常包含以下核心部分:
-
根目录:项目名,存放最重要的配置文件。
pyproject.toml:现代项目的核心。用[build-system]声明构建后端(如hatchling,setuptools),用[project]定义元数据(名称、版本、依赖)。它正在取代setup.py。README.md:项目门面,说明是什么、怎么用。LICENSE:开源许可证,明确使用权利。requirements.txt/Pipfile:应用依赖清单,用于部署和开发环境复制。注意与pyproject.toml中的[project]依赖区分(后者是库的依赖声明)。
-
源码目录:存放项目的主要Python代码。
- 通常是一个与项目同名的包(例如项目叫
my_project,源码目录就是/my_project)。里面是模块(.py文件)和子包。 __init__.py:让Python将目录识别为包,可以空着,也可以放包级别的初始化代码或定义__all__。
- 通常是一个与项目同名的包(例如项目叫
-
测试目录:与源码分离,存放所有测试代码。
- 通常命名为
tests/,与源码包平行。内部结构最好镜像源码结构(例如tests/test_module_a.py对应my_project/module_a.py)。 - 使用
pytest框架是当前最佳实践。
- 通常命名为
-
文档目录:可选但强烈推荐,特别是开源项目。
- 通常为
docs/,使用Sphinx + ReadTheDocs主题来生成美观的文档。
- 通常为
-
其他关键文件/目录:
.gitignore:忽略虚拟环境、编译文件等。src/布局(可选):一种将项目包放在src/目录下的结构,能避免无意中从本地路径导入包,让测试更干净。但会增加一点复杂度。scripts/或cli.py:存放命令行入口点脚本。
一句话总结:用 pyproject.toml 管理项目和依赖,保持源码、测试、文档分离,结构清晰明了。
python 应该是用 README.rst
还是有点区别的
感觉改动好像叫 changelog 的多一点
我是看 kennethreits 的项目喜欢用 HISTORY, 而且这样感觉要舒服也一些.你觉得呢
这个也不错,在我参考的项目里面
参照下面两个模板就够了:
https://github.com/pypa/sampleproject
https://github.com/audreyr/cookiecutter-pypackage
README.rst 的好处是能显示在 pypi.org 里, 当然项目里用 .md, 打包时转成 .rst 的也不少, 但至少最终的包里应该是 .rst


