工程化
项目结构与依赖管理
工业级 Python 项目的目录结构、pyproject.toml 和依赖管理
- 掌握 src/ 布局和标准项目结构
- 理解 pyproject.toml (PEP 517/518)
- 掌握虚拟环境和依赖锁定
- 了解 uv/poetry 等现代工具
项目结构与依赖管理
工业级 Python 项目的结构不是随便建几个文件夹,有明确的约定和最佳实践。
标准项目结构
示例代码(可运行)
Python 0%
pyproject.toml — 现代 Python 项目的核心
示例代码(可运行)
Python 0%
虚拟环境与依赖管理工具
示例代码(可运行)
Python 0%
🐍资深工程师经验谈
依赖管理的核心原则:生产依赖和开发依赖分离([project.optional-dependencies])永远提交 lock 文件(uv.lock/poetry.lock),保证可复现构建用 ~= 或 >=,< 约束版本范围,不要用 == 锁死所有传递依赖定期用 pip-audit 扫漏洞不要在虚拟环境外 pip installrequirements.txt 适合应用,pyproject.toml 适合库
requirements.txt 最佳实践
Python
# 应用项目的 requirements 分层
# requirements/base.txt - 基础依赖
# httpx>=0.27
# pydantic>=2.0
#
# requirements/dev.txt - 开发依赖
# -r base.txt
# pytest>=8
# ruff>=0.5
#
# requirements/prod.txt - 生产依赖
# -r base.txt
# gunicorn>=21
#
# 锁定完整版本(可复现):
# pip freeze > requirements.lock.txt
# 或用 uv pip compile 生成带哈希的锁定文件
# 安装:
# pip install -r requirements/dev.txt
# uv pip install -r requirements/dev.txt # 快 10-100 倍(官方基准区间)
print("生产环境用锁定版本,开发环境用范围版本")版本号与依赖范围
理解版本号和依赖范围
示例
# SemVer: MAJOR.MINOR.PATCH
# 1.2.3 → 主版本(不兼容变更).次版本(新功能兼容).修订(bug修复)
# 版本范围符号:
# >=1.0,<2.0 1.x 最新版(推荐)
# ~=1.2 等价于 >=1.2,<2.0
# ==1.2.3 精确版本(lock文件用)
# >=1.0 1.0及以上(危险,可能引入不兼容)
# !=1.5 排除特定版本
# ^1.2.3 (poetry/uv) 等价于 >=1.2.3,<2.0.0
# ~1.2.3 (poetry/uv) 等价于 >=1.2.3,<1.3.0选择题
src/ 布局的主要好处是?
选择题
2024年最快的 Python 包管理器是?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
常见根因:内存泄漏导致 OOM 被系统杀掉、连接/文件句柄没关闭耗尽、事件循环里混入同步阻塞、未捕获异常让进程退出。12-Factor App 的建议很实用:配置环境化、日志当成事件流输出、进程保持无状态(状态放数据库/缓存),这样才能随时加副本做水平扩展。
挑战任务
项目结构挑战
简单+50 XP
写一个函数,输出标准项目结构的创建步骤(模拟脚手架)。
项目结构挑战
Python 0%
2 个测试用例
课后作业
依赖解析器
中等+20 XP
写一个 parse_requirements 函数,解析 requirements.txt 格式的依赖列表,返回包名列表。
依赖解析器
Python 0%
1 个测试用例