0Pricing
Python Academy · 课时

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 项目结构与 pyproject.toml
  2. 使用 build 构建
  3. 版本管理与元数据
  4. 使用 twine 发布
← 返回 Python Academy