PyPI 部署
本页面记录使用下一个主要版本 dpl v2 的部署,该版本目前处于测试阶段。请参阅 我们的博客文章 获取详细信息。当前默认版本为 dpl v1。请查看 此处 的 dpl v1 文档。
请务必阅读 v2 部署概述。
Travis CI 可以自动将您的 Python 包发布到 PyPI,前提是构建成功。
对于最小配置,请将以下内容添加到您的 .travis.yml
文件中
deploy:
provider: pypi
username: <username>
password: <encrypted password>
edge: true # opt in to dpl v2
状态 #
对 PyPI 部署的支持为 **稳定**。
已知选项 #
使用以下选项进一步配置部署。
用户名 |
PyPI 用户名 — **必需**,类型:字符串,别名:user |
密码 |
PyPI 密码 — **必需**,**机密**,类型:字符串 |
服务器 |
发布到不同的索引 — 类型:字符串,默认值:https://upload.pypi.org/legacy/ |
发行版 |
要上传到 PyPI 的发行版的空格分隔列表 — 类型:字符串,默认值:sdist |
docs_dir |
要从中上传文档的目录路径 — 类型:字符串,默认值:build/docs |
skip_existing |
不要覆盖服务器上同名的现有文件。 — 类型:布尔值 |
upload_docs |
上传文档 — 类型:布尔值,默认值:false ,注意:大多数 PyPI 服务器(包括 upload.pypi.org)不支持上传文档 |
twine_check |
是否运行 twine check — 类型:布尔值,默认值:true |
remove_build_dir |
上传后删除构建目录 — 类型:布尔值,默认值:true |
setuptools_version |
类型:字符串,格式:/\A\d+(?:\.\d+)*\z/ |
twine_version |
类型:字符串,格式:/\A\d+(?:\.\d+)*\z/ |
wheel_version |
类型:字符串,格式:/\A\d+(?:\.\d+)*\z/ |
共享选项 #
清理 |
在部署之前从 Git 工作目录中清理构建工件 — 类型:布尔值 |
运行 |
部署成功完成后要执行的命令 — 类型:字符串或字符串数组 |
环境变量 #
如果所有选项都以 PYPI_
为前缀,则可以作为环境变量提供。
例如,password
可以作为 PYPI_PASSWORD=<password>
提供。
保护机密 #
机密选项值应作为您的构建配置(.travis.yml
文件)中的加密字符串或存储库设置中的环境变量提供。
可以在存储库的设置页面上设置环境变量,也可以使用 travis env set
设置。
travis env set PYPI_PASSWORD <password>
为了在将选项值添加到 .travis.yml
文件时对其进行加密,请使用 travis encrypt
travis encrypt <password>
或者使用 --add
将其直接添加到您的 .travis.yml
文件中。请注意,此命令必须在您的存储库的根目录中运行
travis encrypt --add deploy.password <password>
发布到自托管 PyPI #
要发布到不同的 PyPI 索引
deploy:
provider: pypi
# ⋮
server: https://mypackageindex.com/index
上传不同的发行版 #
默认情况下,只会将源发行版(‘sdist’)上传到 PyPI。如果您想上传不同的发行版,请使用 distributions
选项指定它们,如下所示
deploy:
provider: pypi
# ⋮
distributions: "sdist bdist_wheel" # Your distributions here
如果您在发行版中指定了 bdist_wheel
,则会自动安装 wheel
包。
仅上传一次工件 #
默认情况下,Travis CI 会为您指定的每个 python
和 environment
运行部署步骤。其中许多步骤将生成竞争的构建工件,这些工件将无法上传到 pypi,并会显示类似以下内容的消息
HTTPError: 400 Client Error: File already exists.
为了避免这种情况,请使用 skip_existing
标志
deploy:
provider: pypi
# ⋮
skip_existing: true
部署标签 #
最有可能的是,您只希望在剪切了新版本的包时进行部署。
为此,您可以包含一个 tags
条件,如下所示
deploy:
provider: pypi
# ⋮
on:
tags: true
如果您在本地标记了提交,请记住运行 git push --tags
以确保您的标签已上传到 GitHub。
拉取请求 #
请注意,拉取请求构建完全跳过部署步骤。