Files

101 lines
3.4 KiB
Markdown

---
doc_type: short
full_text: sources/03_Distribution.md
---
# 03_Distribution 总结
本文介绍 Python 项目分发的最基础流程:通过 `setup.py` 描述项目元数据与包结构,通过 `MANIFEST.in` 声明额外文件,使用 `python setup.py sdist` 创建源码分发包,并让他人通过 `pip` 安装该包。该内容是课程中的传统入门示例,用于理解源码分发的基本思想;现代项目通常应参考 Python Packaging User Guide,并使用 `pyproject.toml` 与 `python -m build` 等当前实践。该主题也与 pip、虚拟环境 和 Python项目结构 相关。
## 核心内容
### 1. 创建 `setup.py`
项目顶层目录需要添加 `setup.py` 文件,用来描述包的基本元数据,并调用 `setuptools.setup()` 完成打包配置。
示例信息包括:
- `name`:包名,例如 `porty`
- `version`:版本号,例如 `0.0.1`
- `author` / `author_email`:作者信息
- `description`:项目描述
- `packages=setuptools.find_packages()`:自动发现项目中的 Python 包
这一步是 Python 代码能够被打包和安装的基础。
### 2. 创建 `MANIFEST.in`
如果项目中包含 Python 源码之外的额外文件,需要使用 `MANIFEST.in` 声明它们。
例如:
```text
include *.csv
```
这表示将顶层目录中的 `.csv` 文件包含进源码分发包。`MANIFEST.in` 应与 `setup.py` 放在同一目录。
### 3. 创建源码分发包
运行以下命令:
```bash
python setup.py sdist
```
该命令会在 `dist/` 目录下生成 `.tar.gz` 或 `.zip` 文件。这个文件就是可以分发给他人的 Python 源码包。
需要注意:这是课程材料中的传统最小流程,不应被理解为现代项目的唯一推荐做法。实际项目应优先查看 Python Packaging User Guide 中关于 `pyproject.toml`、构建后端和 `python -m build` 的当前说明。
### 4. 安装分发包
其他用户可以使用 `pip` 安装生成的分发文件,例如:
```bash
python -m pip install porty-0.0.1.tar.gz
```
这使自定义项目能够像普通第三方包一样被安装和使用。
## 重要观点
- 本文只覆盖 Python 打包分发的“最小可行流程”。
- `python setup.py sdist` 是传统示例;现代项目通常使用 `pyproject.toml` 和构建工具创建分发物。
- 实际项目可能涉及更复杂的问题,例如:
- 第三方依赖管理
- C/C++ 扩展模块
- 非 Python 资源文件
- 更完整的包元数据
- 发布到包索引服务
- 课程建议更深入的内容参考 Python Packaging User Guide。
## 练习 9.5:制作一个包
练习要求将 Exercise 9.3 中创建的 `porty-app/` 项目进行打包:
1. 在项目顶层添加 `setup.py`
2. 添加 `MANIFEST.in`
3. 运行:
```bash
python setup.py sdist
```
4. 最后尝试将生成的包安装到 Python 虚拟环境中,以验证打包结果是否可用。
## 相关概念
- Python打包分发:如何把 Python 项目组织成可分发、可安装的软件包。
- Python项目结构:项目顶层目录、包发现、资源文件放置等结构性问题。
- pip:Python 包安装工具,用于安装源码包或第三方依赖。
- 虚拟环境:隔离安装与测试 Python 包的推荐环境。
## Related Concepts
- [[concepts/代码分发]]
- [[concepts/包与虚拟环境]]
- [[concepts/依赖管理]]
- [[concepts/模块与-import]]
- [[concepts/库接口设计]]
- [[concepts/Python-开发环境]]
- [[concepts/课程练习工作流]]