如何发布自己的 Python 库到 PyPI

前言

之前写过一篇如何用 Python 标准库快速比较两个巨复杂的 JSON 之间的内容值的差异(不是简单对比行之间的差距,而是对比那些值有差异),主要用在某个内部服务中做版本管理的。使用效果大概是这样的:

shell 复制代码
# 文件行数为21772行
$ wc -l test_left.json
21772 test_left.json

# 要尽可能快的比较出来
$ time json-diff test_left.json test_right.json
[
    {
        "path": "variables[3].spec.sort",
        "kind": "modified",
        "left": "alphabeticalAsc123",
        "right": "alphabeticalAsc"
    }
]
# 耗时 0.04 秒
json-diff test_left.json test_right.json  0.04s user 0.02s system 99% cpu 0.055 total

当时有人问能否打包发到 PyPI 上,于是我动手稍微改了下,做了一半,后来给其他事情耽搁了,拖了那么久,也忘了 PyPI 怎么发包的了,正好借此整理下步骤。

想尝试的小伙伴也可以安装下试试:

bash 复制代码
python -m pip install quick-json-diff

代码

pyproject.toml

有多种项目构建方式,基于 pyproject.toml 是其中一种。如果用 uv 的话,那么基于 uv 生成的 pyproject.toml 稍作修改会更方便点。

基本需要的配置如下,其中 [build-system] 用来声明构建后端,可替换为其它多种构建后端,具体可见底部关于 pyproject.toml 的参考链接。

toml 复制代码
[project]
name = "quick-json-diff"
version = "1.0.0"
description = "Compare two JSON files quickly using Python standard library."
readme = "README.md"
requires-python = ">=3.9"
license = { file = "LICENSE" }

[build-system]
requires = ["setuptools >= 77.0.3"]
build-backend = "setuptools.build_meta"

代码布局

对于我这个 SDK,我用的是src/ 结构布局,也就是:

复制代码
└─ src
  └─ quick_json_diff

本地构建

  1. 安装构建工具。build 用来构建,twine 用来上传 PyPI
bash 复制代码
python -m pip install --upgrade build twine
  1. 构建。构建结果会生成在 dist/ 目录下
shell 复制代码
python -m build
  1. 上传 PyPI 前,用 twine 检查包元数据
bash 复制代码
$ twine check dist/*
Checking dist/quick_json_diff-1.0.0-py3-none-any.whl: PASSED
Checking dist/quick_json_diff-1.0.0.tar.gz: PASSED

上传

shell 复制代码
# 上传 TestPyPI
twine upload --repository-url https://test.pypi.org/legacy/ dist/*

# 从 TestPyPI 下载测试
pip install -i https://test.pypi.org/simple/ quick-json-diff

# 上传 PyPI
twine upload dist/*
  1. 本地安装测试
bash 复制代码
python -m pip install dist/quick_json_diff-1.0.0-py3-none-any.whl

发布到 PyPI

上传到 PyPI 之前,最好先发布到 TestPyPI 作为测试,验证展示页和安装体验。

  1. 先到 test.pypi.orgpypi.org 注册账号。分别创建 API Token
  2. 发布到 TestPyPI。上传时会提示输入 API Token
bash 复制代码
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
  1. 测试安装
bash 复制代码
python -m pip install \
  -i https://test.pypi.org/simple/ \
  quick-json-diff
  1. 前面测试没问题的话,再上传到 PyPI
bash 复制代码
twine upload dist/*
  1. 结束

补充

  • 后续发新版,需要修改 pyproject.toml 中的 version,然后重新构建、上传。

参考

相关推荐
名明鸣冥1 小时前
k8s-agent架构思考(一)
python
DoLovya2 小时前
从零实现 ESP8266 + MQTT 智能门禁:公网一键开门、舵机控制、在线监控完整方案
python·物联网·mqtt·嵌入式·esp8266·门禁系统
AI情绪识别开源2 小时前
检信ALLEMOTION VibrationAI 2.4.0 12维度情绪识别开源源代码
开发语言·python
极创信息3 小时前
国产化信创适配认证高频术语:信创适配、软件自主可控、国产化率、代码溯源率、代码自主率、代码开源率是什么?
java·python·struts·eclipse·开源·php·hibernate
AC赳赳老秦3 小时前
语义采集进阶实战:利用 OpenClaw AI 语义识别自动提取网页核心信息,无需手动编写选择器
java·运维·服务器·python·信息可视化·deepseek·openclaw
Logintern093 小时前
什么时候应该用多进程什么时候用多线程呢?
开发语言·python
无凭4 小时前
字节跳动 DeerFlow:Agent Harness 怎么让大模型主动向用户提问?
人工智能·python
蜀道山老天师4 小时前
Python + Playwright 实现问卷星自动化填写
python
Zane19944 小时前
多开几个线程,为什么算数字反而没变快?一文讲透 CPython 的 GIL
后端·python
W_326004 小时前
Python-OpenCV边缘检测与阈值分割:Sobel、Scharr、Laplacian、Canny、全局与自适应阈值
开发语言·图像处理·python·opencv·机器学习