使用 twine 发布
上传到 PyPI
使用 twine 发布 是 CoddyKit 上的免费 Python Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
最后一步
您已经在 dist/ 中构建了产物。最后一步是将它们上传到 PyPI,这样全世界的用户都可以通过 pip install 安装您的软件包。用于此操作的标准工具是 twine。
twine 会通过 HTTPS 安全地上传,并在发送前验证构建产物。
安装 twine
请使用 pip install twine 安装它。这是一个小巧而专注的工具:它的唯一任务是验证并上传 dist/ 中的文件。它不会构建任何内容。
先使用 TestPyPI
TestPyPI 是一个独立的沙盒环境,用于演练上传流程。请先在那里发布,以便在不影响正式索引的情况下发现问题。TestPyPI 上的名称和版本与 PyPI 相互独立。
请使用 twine upload --repository testpypi dist/* 上传。
上传前检查
twine check dist/* 会验证您的元数据和长描述能否在 PyPI 上正确呈现。请每次都运行它;否则,有问题的 README 描述可能会在项目页面上显示为纯文本。
files = ['mytool-0.1.0.tar.gz', 'mytool-0.1.0-py3-none-any.whl']
for f in files:
status = 'PASSED' if f.endswith(('.gz', '.whl')) else 'SKIP'
print('check', f, '->', status)使用 API 令牌,而非密码
请使用 PyPI 账户中的API 令牌进行身份验证,而不是使用密码。请将 __token__ 作为用户名,并将令牌(以 pypi- 开头)作为密码。令牌可以限定到单个项目,也可以随时撤销。
username = '__token__'
token = 'pypi-AgEIcHl...'
print('Username:', username)
print('Token starts with:', token[:5])
print('Never commit the token to git')存储凭据
将令牌存储在 ~/.pypirc 文件或环境变量(TWINE_USERNAME、TWINE_PASSWORD)中,避免每次重新输入。请将此文件排除在版本控制之外,并仅允许您自己读取。
上传到 PyPI
TestPyPI 验证无误后,请使用 twine upload dist/* 正式发布。片刻之后,世界各地的用户就可以安装您的软件包了。此操作无法撤销:即使删除了某个版本,您也无法重新上传相同的版本。
版本不可变
PyPI 绝不会允许您覆盖已发布的版本。如果发布后发现错误,您必须发布新版本(例如递增修订号)。请将这一规则纳入您的工作流,以免陷入无法处理的情况。
published = {'1.0.0', '1.0.1'}
new_version = '1.0.1'
if new_version in published:
print(new_version, 'already on PyPI - bump and rebuild')
else:
print(new_version, 'is free to upload')验证安装
上传后,请确认软件包能够正常运行:创建一个全新的虚拟环境,运行 pip install mytool,然后导入它。从干净环境安装可以发现构建过程未能发现的文件缺失和依赖问题。
可信发布
现代项目可以通过可信发布跳过手动令牌:PyPI 会通过 OpenID Connect 直接验证 CI 工作流(例如 GitHub Actions)。整个过程中不会存储长期有效的密钥,因此更加安全。
twine 仍然负责上传,但凭据的有效期很短,并且会在运行时签发。
自动化发布
一种常见的设置是:当您推送类似 v1.0.0 的 git 标签时触发发布。CI 工作流会自动构建、运行 twine check 并上传。添加标签就成为发布某个版本的唯一操作。
这样可以让发布过程保持一致,并避免手动上传时出错。
快速检查
测试一下您对发布流程的掌握情况。
回顾
您已经发布了一个软件包:
pip install twine,然后运行twine check dist/*- 正式上传前,先在 TestPyPI 上演练
- 使用具有限定范围的API 令牌(
__token__)进行身份验证,绝不要使用密码 twine upload dist/*会完成发布;版本是不可变的,因此要递增版本来修复错误- 通过在干净环境中运行
pip install进行验证
常见问题解答
「使用 twine 发布」课时是免费的吗?
是的 — 「使用 twine 发布」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「使用 twine 发布」这节课中我会学到什么?
上传到 PyPI 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用 twine 发布」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 项目结构与 pyproject.toml
- 使用 build 构建
- 版本管理与元数据
- 使用 twine 发布