最近感兴趣想将开发的项目转成Package,研究了一下相关文章,并且自己跑通了,走了一下弯路,这里记录一下如何打包一个简单的Python项目,展示如何添加必要的文件和结构来创建包,如何构建包,以及如何将其上传到Python包索引(PyPI)。
首先要确保安装最新版本:
# Unix/macOS
python3-m pip install--upgrade pip
# windows
py-m pip install--upgrade pip
一个简单的项目
本教程使用一个名为example_package_YOUR_USERNAME_HERE
的简单项目。如果你的用户名是me
,那么包将会是example_package_me
;另外确保有一个唯一的包名,不会与遵循本教程的其他人上传的包冲突。建议在打包自己的项目之前,按照本教程的原样使用这个项目。
在本地创建以下文件结构:
packaging_tutorial/
└── src/
└── example_package_YOUR_USERNAME_HERE/
├── __init__.py
└── example.py
包含Python文件的目录应该与项目名称匹配。这简化了配置,对于安装包的用户来说更加明显。
__init__. py
是将目录导入为包所必需的,即使在本教程中,该文件是空的。
example.py
是包内模块的示例,该模块可能包含包的逻辑(函数、类、常量等)。打开该文件并输入以下内容:
def add_one(number):
return number + 1
创建此结构后,需要在packaging_tutorial
目录中运行本教程中的所有命令。
创建包文件
现在将添加用于准备项目以进行分发的文件。完成后,项目结构将如下所示:
packaging_tutorial/
├── LICENSE
├── pyproject.toml
├── README.md
├── src/
│ └── example_package_YOUR_USERNAME_HERE/
│ ├── __init__.py
│ └── example.py
└── tests/
创建测试目录
test/
是测试文件的占位符,这里暂时将其留空。
选择构建后端
像pip和build这样的工具实际上不会将源代码转换为分发包(如轮子);该工作由构建后端执行。构建后端决定您的项目将如何指定其配置,包括元数据(有关项目的信息,例如,PyPI上显示的名称和标签)和输入文件。构建后端具有不同级别的功能,例如它们是否支持构建扩展模块,应该选择适合需求和偏好的一个。
这里可以从许多后端中进行选择;本教程默认使用Hatchling,但它将与支持元数据的setuptools、Flight、PDM和其他支持[project]
表的方法相同。
pyproject.toml
告诉构建前端工具,如pip和build,为项目使用哪个后端。以下是一些常见构建后端的示例,但请查看后端自己的留档以获取更多详细信息。
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[build-system]
requires = ["flit_core>=3.4"]
build-b