PyPI 打包小记

你们这些家伙,好好看看我是怎么打包的吧!

GitHub 项目地址:hit-and-blow

一、文件结构介绍

打包前,需构建如下文件结构:

packaging_tutorial/
├── LICENSE
├── pyproject.toml
├── README.md
├── src/
│   └── YOUR_PACKAGE_NAME/
│       ├── __init__.py
│       └── example.py
└── tests/

各个 文件 / 文件夹 说明:

  • packaging_tutorial: 项目文件夹
  • LICENSE: 开源协议,可由 GitHub 生成
  • pyproject.toml: 打包配置文件
  • README.md: 项目文档
  • src: 项目结构要求的,用来放主程序
  • YOUR_PACKAGE_NAME: 主程序文件夹,以“你的包名”命名文件夹

二、添加配置文件

将以下内容修改一下,改改名字邮箱什么的,存成配置文件 pyproject.toml

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
  { name="Example Author", email="[email protected]" },
]
description = "A small example package"
readme = "README.md"
requires-python = ">=3.7"
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"

三、打包

3.1 准备打包环境

python3 -m pip install --upgrade pip
python3 -m pip install --upgrade build

3.2 打包

来到 pyproject.toml 所在目录,打开命令行,运行代码:

python3 -m build

操作后,当前目录下生成名为 dist 的文件夹。文件夹内是打包好的项目。

四、测试

4.1 创建一个 conda 环境

# 新建一个 conda 环境
# 如果你是 conda-forge 用户,可以使用 mamba 替代 conda
mamba create -n python_37 python=3.7

# 激活环境
conda activate python_37

# 检查环境
conda info --envs

# 退出环境(如需)
conda deactivate

# 删除环境(如需)
conda env remove --name python_37

PS: Python 版本不能低于 toml 文件中 requires-python 的要求

4.2 本地安装

从源代码安装软件包

# Install from source
# 来到项目根目录,运行
pip install -e .

# 或者从本地 wheel 文件安装
# pip install dist/[YOUR_PACKAGE]-[VERSION]-py3-none-any.whl

# 卸载软件包
pip uninstall [YOUR_PACKAGE]

安装完成后,就可以通过 import [YOUR_PACKAGE] 对包进行各种测试了。

五、上传

5.1 准备上传环境

python3 -m pip install --upgrade twine

5.2 注册 PyPI 账号

PyPI 提供了测试服和正式服。测试上传选测试账号,正式上传选正式账号。

注册账号后申请 API token.

注册账号的链接 获取 API token 的链接
测试服 test.pypi.org/account/register test.pypi.org/manage/account
正式服 pypi.org/account/register pypi.org/manage/account

Note: 正式服需要完成 2FA 验证才能获取 API token,测试服无需验证

5.3 上传到 PyPI

两种情况:

1)上传测试服 TestPyPI

python3 -m twine upload --repository testpypi dist/*

2)上传正式服 PyPI

twine upload dist/* 

运行命令后,命令行会要求你输入 usernamepassword

  • username__token__
  • password 填你的 API token,就是 pypi- 开头那串东西

5.4 下载使用

现在可以用 pip install [YOUR_PACKAGE] 下载使用了!

🖐️ 不要走开🖐️ 广告时间到!

作为练习,我为豆瓣 9.1 分的 《世界游戏大全51》 中的小游戏“猜颜色”写了解算器(作弊器)并打包上传到 PyPI。如果感兴趣,可以在 PyPIGitHub 下载~