PyPI 部署

此页面记录了使用 dpl v1 进行部署,dpl v1 目前是默认版本。下一个主要版本 dpl v2 将很快发布,我们建议您开始使用它。请参阅 我们的博客文章 获取详细信息。 dpl v2 文档可以在此处找到

Travis CI 可以在构建成功后自动将您的 Python 包发布到 PyPI

对于最小配置,请生成 PyPI API 令牌 并将以下内容添加到您的 .travis.yml

deploy:
  provider: pypi
  username: "__token__"
  password: "Your PyPI API token, including the pypi- prefix"
YAML

但是,这会将您的 PyPI API 令牌公开给所有人。我们建议您 加密 密码并通过运行将其添加到您的 .travis.yml 中

travis encrypt your-api-token --add deploy.password
Bash

如果您使用的是 travis-ci.com 而不是 travis-ci.org,则需要添加 --com 参数来切换 Travis API 端点

travis encrypt your-api-token --add deploy.password --com
Bash
deploy:
  provider: pypi
  username: "__token__"
  password:
    secure: "Your encrypted token"
YAML

也可以使用 PyPI 用户名和密码而不是令牌,但不推荐。

请注意,如果您的 PyPI 密码包含 特殊字符,则需要在加密密码之前对其进行转义。有些人 报告了 使用包含除字母数字字符以外的任何字符的密码连接到 PyPI 的困难。

部署标签 #

最有可能的是,您只希望在您的包的新版本发布时才部署到 PyPI。为此,您可以告诉 Travis CI 仅在标记的提交上部署,如下所示

deploy:
  provider: pypi
  username: ...
  password: ...
  on:
    tags: true
YAML

如果您在本地标记了提交,请记住运行 git push --tags 以确保您的标签已上传到 GitHub。

部署特定分支 #

您可以使用 **on** 选项显式指定要从中发布的分支

deploy:
  provider: pypi
  username: ...
  password: ...
  on:
    branch: production
YAML

或者,您还可以配置 Travis CI 从所有分支发布

deploy:
  provider: pypi
  username: ...
  password: ...
  on:
    all_branches: true
YAML

默认情况下,Travis CI 仅从 **master** 分支发布。

从拉取请求触发的构建永远不会触发发布。

发布到自托管 PyPI #

要发布到不同的 PyPI 索引

deploy:
  provider: pypi
  username: ...
  password: ...
  server: https://mypackageindex.com/index
YAML

上传不同的发行版 #

默认情况下,只有源发行版(‘sdist’)将上传到 PyPI。如果您想上传不同的发行版,请使用 distributions 选项指定它们,如下所示

deploy:
  provider: pypi
  username: ...
  password: ...
  distributions: "sdist bdist_wheel" # Your distributions here

如果您在发行版中指定了 bdist_wheel,则将自动安装 wheel 包。

仅上传一次工件 #

默认情况下,Travis CI 为您指定的每个 pythonenvironment 运行部署阶段。其中许多将生成竞争的构建工件,这些工件将无法上传到 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_deployafter_deploy 阶段。只有在 Travis CI 实际推送发布时才会触发这些阶段。

before_deploy: "echo 'ready?'"
deploy:
  ..
after_deploy:
  - ./after_deploy_1.sh
  - ./after_deploy_2.sh