打包制作 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 选择构建后端,支持 HatchlingsetuptoolsFlitPDM

# 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:

  • Linux 实用配置记录
  • 中文文案排版指南
  • 我的表达欲在递减
  • Windows实用配置记录
  • 我的常用工具