PyPI 部署
此页面记录了使用 dpl v1 进行部署,dpl v1 目前是默认版本。下一个主要版本 dpl v2 将很快发布,我们建议您开始使用它。请参阅 我们的博客文章 获取详细信息。 dpl v2 文档可以在此处找到。
Travis CI 可以在构建成功后自动将您的 Python 包发布到 PyPI。
对于最小配置,请生成 PyPI API 令牌 并将以下内容添加到您的 .travis.yml
中
但是,这会将您的 PyPI API 令牌公开给所有人。我们建议您 加密 密码并通过运行将其添加到您的 .travis.yml 中
如果您使用的是 travis-ci.com 而不是 travis-ci.org,则需要添加 --com
参数来切换 Travis API 端点
也可以使用 PyPI 用户名和密码而不是令牌,但不推荐。
请注意,如果您的 PyPI 密码包含 特殊字符,则需要在加密密码之前对其进行转义。有些人 报告了 使用包含除字母数字字符以外的任何字符的密码连接到 PyPI 的困难。
部署标签 #
最有可能的是,您只希望在您的包的新版本发布时才部署到 PyPI。为此,您可以告诉 Travis CI 仅在标记的提交上部署,如下所示
如果您在本地标记了提交,请记住运行 git push --tags
以确保您的标签已上传到 GitHub。
部署特定分支 #
您可以使用 **on** 选项显式指定要从中发布的分支
或者,您还可以配置 Travis CI 从所有分支发布
默认情况下,Travis CI 仅从 **master** 分支发布。
从拉取请求触发的构建永远不会触发发布。
发布到自托管 PyPI #
要发布到不同的 PyPI 索引
上传不同的发行版 #
默认情况下,只有源发行版(‘sdist’)将上传到 PyPI。如果您想上传不同的发行版,请使用 distributions
选项指定它们,如下所示
deploy:
provider: pypi
username: ...
password: ...
distributions: "sdist bdist_wheel" # Your distributions here
如果您在发行版中指定了 bdist_wheel
,则将自动安装 wheel
包。
仅上传一次工件 #
默认情况下,Travis CI 为您指定的每个 python
和 environment
运行部署阶段。其中许多将生成竞争的构建工件,这些工件将无法上传到 pypi,并显示类似以下内容的消息
HTTPError: 400 Client Error: File already exists. See https://pypi.ac.cn/help/#file-name-reuse for url: https://upload.pypi.org/legacy/
为避免这种情况,请使用 skip_existing
标志
deploy:
provider: pypi
username: ...
password: ...
skip_existing: true
发布构建工件 #
在您的测试运行完毕且在发布之前,Travis CI 将清理您进行的任何其他文件和更改。
这可能不是您想要的,因为您可能生成了一些也应该发布的工件。现在有一个选项可以跳过清理
deploy:
provider: pypi
username: ...
password: ...
skip_cleanup: true
条件发布 #
您只能在满足某些条件时才部署。请参阅 使用 on:
进行条件发布。
在发布前后运行命令 #
有时您想在发布包之前或之后运行命令。您可以为此使用 before_deploy
和 after_deploy
阶段。只有在 Travis CI 实际推送发布时才会触发这些阶段。
before_deploy: "echo 'ready?'"
deploy:
..
after_deploy:
- ./after_deploy_1.sh
- ./after_deploy_2.sh