典型的 Python 项目结构

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

一个通用的 Python 包(Package) 的文件结构,通常遵循一定的组织规范,以便于开发、测试、部署和维护。这种结构不仅有助于代码管理,还方便使用工具链如 setuptoolspytestsphinx 等。

下面是一个典型的 Python 项目结构说明,包括 src/test/docs/scripts/ 等目录及其关系。


📁 一、标准项目结构(推荐)

my_project/
├── src/
│   └── my_package/
│       ├── __init__.py
│       ├── module1.py
│       └── module2.py
├── tests/
│   ├── __init__.py
│   ├── test_module1.py
│   └── test_module2.py
├── docs/
│   ├── conf.py
│   ├── index.rst
│   └── Makefile
├── scripts/
│   └── setup.sh
├── .gitignore
├── LICENSE
├── README.md
├── pyproject.toml
├── setup.py (可选)
└── requirements.txt

📁 二、各目录详解

1. src/ —— 源码目录(Source Code)

这是你的核心代码存放的地方,所有模块都应该放在这个目录下的子包中。

  • 优点:
    • 避免将源码直接放在根目录下,避免污染全局命名空间。
    • 更容易控制安装时的包结构。
  • 用法:
    from my_package.module1 import some_function
    
示例结构:
src/
└── my_package/
    ├── __init__.py
    ├── utils.py
    ├── core/
    │   ├── __init__.py
    │   └── engine.py
    └── api/
        ├── __init__.py
        └── server.py

⚠️ 如果你不使用 src/ 目录,也可以把包直接放在根目录下,但不推荐,尤其是用于打包发布时。


2. tests/ —— 测试目录(Unit Tests / Integration Tests)

这是你编写单元测试、集成测试等的地方,一般使用 pytestunittest 来运行。

  • ✅ 命名建议:
    • 文件名以 test_ 开头(例如 test_utils.py)。
    • 函数名以 test_ 开头(例如 def test_addition():)。
示例结构:
tests/
├── test_core/
│   ├── test_engine.py
├── test_api/
│   ├── test_server.py
└── conftest.py  # pytest 全局 fixture

3. docs/ —— 文档目录(API Docs, Markdown, etc.)

用于生成和存储项目的文档,通常使用 Sphinx 编写 API 文档。

  • ✅ 使用 .rst 格式或 Markdown(配合 myst-parser)。
  • ✅ 通过命令 make html 可以生成 HTML 文档。
示例结构:
docs/
├── conf.py
├── index.rst
├── modules.rst
├── images/
│   └── logo.png
└── Makefile

4. scripts/ —— 脚本目录(Build Scripts, CLI Tools)

存放一些辅助脚本,比如构建脚本、环境初始化脚本、CLI 工具等。

示例:
scripts/
├── install_deps.sh
├── build.sh
├── run_dev.sh
└── generate_mock_data.py

5. .gitignore —— Git 忽略配置

告诉 Git 不要提交哪些文件(如缓存、虚拟环境、编译产物等)。

示例内容:

__pycache__
*.pyc
*.log
*.swp
.env
venv/
build/
dist/
*.egg-info/

6. README.md —— 项目简介

Markdown 格式的项目介绍文档,是用户第一眼看到的内容,应包含:

  • 项目功能
  • 安装方法
  • 使用示例
  • 贡献指南
  • 许可证信息

7. LICENSE —— 授权协议

声明项目的开源许可协议,如 MIT、Apache、GPL 等。


8. pyproject.toml —— 项目元数据和构建配置(推荐)

用于替代旧版的 setup.py,现代 Python 打包推荐使用 pyproject.toml

示例内容:
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "my-package"
version = "0.1.0"
description = "A short description of the project."
readme = "README.md"
requires-python = ">=3.8"
license = { file="LICENSE" }
authors = [
    { name="Your Name", email="you@example.com" }
]
dependencies = [
    "requests",
    "numpy",
]

[project.urls]
homepage = "https://example.com"
repository = "https://github.com/example/my-package"

9. requirements.txt —— 第三方依赖列表

列出项目所需的第三方库,便于快速安装。

示例:

requests==2.28.2
numpy>=1.24.0
pandas

⚠️ 在现代项目中,更推荐使用 pyproject.toml 中的 dependencies 字段来管理依赖。


🧱 三、项目打包与安装流程

1. 构建 wheel 和 sdist

cd my_project/
python -m build

这会生成 dist/ 目录下的 .whl.tar.gz 文件。

2. 安装本地开发版本(editable mode)

pip install -e .

注意:如果你使用了 src/ 结构,这种方式不会污染全局 Python 环境。


🧪 四、测试执行方式(pytest)

确保你在项目根目录下运行测试:

pytest tests/

或者带覆盖率报告:

pytest --cov=my_package tests/

📦 五、常见结构对比

项目结构适用场景
单个脚本小型脚本、一次性任务
没有 src/ 的简单包初学者学习、小型库
src/ 的包正式项目、可发布库
src/ + tests/ + docs/企业级项目、开源项目

✅ 六、总结:你应该怎么组织自己的项目?

用途推荐结构
写一个小脚本直接放 .py 文件即可
学习或练手的小项目放在根目录下的包中
正式项目使用 src/tests/docs/ 分离结构
发布到 PyPI 的库使用 src/ + pyproject.toml + LICENSE + README.md

📘 附:参考模板项目(GitHub)

你可以参考这些官方推荐的模板项目结构:

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值