Python开源项目结构总结与最佳实践

我参考了一些流行的 python 开源项目,总结一下 python 开源项目结构。

基本结构

clipboard.png

结构说明

  • 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 配置

模板地址

https://github.com/gaojiuli/project


Python开源项目结构总结与最佳实践

10 回复

好的,这个问题不涉及具体代码,我来直接聊聊核心。

一个清晰、标准的Python项目结构是项目可维护性和可协作性的基石。现代Python社区普遍遵循的是一种“事实标准”,它通常包含以下核心部分:

  1. 根目录:项目名,存放最重要的配置文件。

    • pyproject.toml现代项目的核心。用[build-system]声明构建后端(如hatchling, setuptools),用[project]定义元数据(名称、版本、依赖)。它正在取代setup.py
    • README.md:项目门面,说明是什么、怎么用。
    • LICENSE:开源许可证,明确使用权利。
    • requirements.txt / Pipfile应用依赖清单,用于部署和开发环境复制。注意与pyproject.toml中的[project]依赖区分(后者是库的依赖声明)。
  2. 源码目录:存放项目的主要Python代码。

    • 通常是一个与项目同名的包(例如项目叫my_project,源码目录就是/my_project)。里面是模块(.py文件)和子包。
    • __init__.py:让Python将目录识别为包,可以空着,也可以放包级别的初始化代码或定义__all__
  3. 测试目录:与源码分离,存放所有测试代码。

    • 通常命名为tests/,与源码包平行。内部结构最好镜像源码结构(例如tests/test_module_a.py对应my_project/module_a.py)。
    • 使用pytest框架是当前最佳实践。
  4. 文档目录:可选但强烈推荐,特别是开源项目。

    • 通常为docs/,使用Sphinx + ReadTheDocs主题来生成美观的文档。
  5. 其他关键文件/目录

    • .gitignore:忽略虚拟环境、编译文件等。
    • src/布局(可选):一种将项目包放在src/目录下的结构,能避免无意中从本地路径导入包,让测试更干净。但会增加一点复杂度。
    • scripts/cli.py:存放命令行入口点脚本。

一句话总结:用 pyproject.toml 管理项目和依赖,保持源码、测试、文档分离,结构清晰明了。

python 应该是用 README.rst

rst 我没找到支持 checkbox 的语法

还是有点区别的

感觉改动好像叫 changelog 的多一点

我是看 kennethreits 的项目喜欢用 HISTORY, 而且这样感觉要舒服也一些.你觉得呢

这个也不错,在我参考的项目里面

参照下面两个模板就够了:
https://github.com/pypa/sampleproject
https://github.com/audreyr/cookiecutter-pypackage

README.rst 的好处是能显示在 pypi.org 里, 当然项目里用 .md, 打包时转成 .rst 的也不少, 但至少最终的包里应该是 .rst

回到顶部