打包制作 Python 模块包
要将你开发的Python项目打包成一个可以通过pip
安装的库,可以按照以下步骤操作:
1. 创建项目目录结构
确保项目目录结构如下:
packaging_tutorial/
├── pyproject.toml
├── src/
│ └── example_package_YOUR_USERNAME_HERE/
│ ├── __init__.py
│ └── example.py
├── LICENSE
├── MANIFEST.in
└── README.md
-
packaging_tutorial
可以是任意的目录名 -
pyproject.toml
是打包配置文件 -
src
存放是程序代码 -
example_package_YOUR_USERNAME_HERE
需要改成期望发布的模块包名(官方建议是在包名后面加上自己的用户名,防止和现有库名重复) -
LICENSE
是许可信息 -
MANIFEST.in
是非必需的,如果需要打包代码文件夹以外的文件要在这里面配置 -
README.md
也是非必需。
2. 创建 pyproject.toml
文件
pyproject.toml
文件用于配置项目的构建工具和元数据。以下是一个示例
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "your_package"
version = "0.1.0"
description = "A brief description of your project"
readme = "README.md"
requires-python = ">=3.10"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
[project.urls]
"Homepage" = "https://github.com/pypa/sampleproject"
"Bug Tracker" = "https://github.com/pypa/sampleproject/issues"
[project.authors]
name = "Your Name"
email = "your.email@example.com"
build-system
选择构建后端,支持 Hatchling
、setuptools
、Flit
、PDM
# Hatchling
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
# setuptools
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
# Flit
[build-system]
requires = ["flit_core>=3.4"]
build-backend = "flit_core.buildapi"
# PDM
[build-system]
requires = ["pdm-backend"]
build-backend = "pdm.backend"
3. 创建 MANIFEST.in
文件
MANIFEST.in
文件用于指定哪些文件应包含在最终的包中。以下是一个示例:
# 包含所有文件和目录
include *
# 排除不需要的文件和目录
exclude some_directory/
exclude *.txt
4. 编写 README.md
文件
在 README.md
文件中写入项目的详细介绍和使用说明。
5. 选择许可证
在 LICENSE
文件中添加你选择的许可证内容,用来告诉安装软件包的用户根据什么条款使用你的软件包。选择许可后,复制许可文本到 LICENSE 文件。
- MIT License 简短而直接,允许他人对你的项目几乎做任何事情,包括制作和分发闭源版本。对共享改进非常友好,因为它允许他人自由地使用、修改和分发你的代码。
- GNU GPLv3 允许他人几乎做任何事情,但不允许分发闭源版本,要求任何基于你的项目构建的派生作品必须>使用相同的许可证发布。 与 MIT 许可证相比更加强调对开源共享的支持,鼓励共享改进并保证了代码的开放性。
- Apache License 2.0 允许他人几乎做任何事情,包括制作、使用和分发闭源版本,但在使用你的专利时提供了一些额外的保护。 要求在派生作品中包含原始许可和免责声明。
- …
6. 创建 __init__.py
文件
在你的模块目录中创建一个空的 __init__.py
文件,使其成为一个 Python 包。
- 标识包:
__init__.py
文件的存在使得 Python 将包含它的目录识别为一个包。这对于模块的导入和管理是必要的。 - 包初始化:当包被导入时,
__init__.py
文件中的代码会首先被执行。你可以在这个文件中初始化包的某些内容,导入子模块,或者定义包的公共接口。 - 管理命名空间:你可以在 ` init.py` 文件中定义包级别的变量、函数和类,使它们在包的顶层命名空间中可用。
7. 构建和打包
- 安装 build 库:
pip install --upgrade build
- 使用
setuptools
工具来打包你的项目。- 终端里切换到 pyproject.toml 文件所在目录,运行指令:python -m build
- 这将创建一个dist
目录,其中包含.tar.gz
和.whl
文件。tar.gz 文件是一个源发行版,而 .whl 文件是构建发行版。较新的pip版本会优先安装构建后的发行版,但如果需要的话会回退到源代码发行版。你应该始终上传源代码发行版,并为你的项目兼容的平台提供构建后的发行版。在这种情况下,我们的示例包在任何平台上都与Python兼容,因此只需要一个构建的发行版。
9. 本地安装
使用 pip
从本地目录安装包。
pip install dist/your_package-0.1.0-py3-none-any.whl
在Python环境中测试你的包是否安装成功:
import your_package
Enjoy Reading This Article?
Here are some more articles you might like to read next: