Python 项目结构与打包完全指南:从入门到实践
当你完成一个 Python 项目,想要发布到 PyPI 供全球开发者下载时,你是否遇到过这些困惑:
pip install背后到底发生了什么?- 为什么安装
beautifulsoup4却要import bs4? - 项目代码应该放在根目录还是
src目录? python -m build和uv build有什么区别?
本文将从依赖安装的底层机制出发,逐步深入到 WHL 文件构建流程,最后探讨现代化项目结构的最佳实践。无论你是刚接触 Python 打包的新手,还是希望迁移到现代工具链的开发者,这篇文章都能给你清晰的指引。
依赖安装机制:当你执行 pip install 时发生了什么?
软件包从哪来?——PyPI 与 WHL 文件
当你执行 pip install flask 时,工具背后做了三件核心的事:
- 查询元数据:向 PyPI(Python Package Index,Python 官方的软件包仓库)请求
flask的包信息 - 下载 WHL 文件:根据你的 Python 版本和操作系统,选择最合适的
.whl文件下载 - 解压安装:将 WHL 文件解压到当前 Python 环境的
site-packages目录
WHL(Wheel) 是 Python 的二进制分发格式标准(由 PEP 427 定义)。它本质上就是一个 ZIP 压缩包,里面包含了:
- 预编译的代码(或纯 Python 源代码)
- 包的元数据(依赖关系、版本信息等)
让我们以 Flask 3.1.1 为例,看看 WHL 文件的真面目:
# 下载 Flask 的 WHL 文件(不安装)
pip download flask==3.1.1 -d ./downloads
# 查看 WHL 内容(WHL 就是 ZIP)
unzip -l ./downloads/flask-3.1.1-py3-none-any.whl
