使用Travis-CI将多个发行版部署到PyPI时防止冲突

时间:2017-09-24 06:06:15

标签: travis-ci pypi

我希望Travis CI在新提交命中master分支时为PyPI构建和部署以下工件:

  • Python 2 wheel
  • Python 3 wheel
  • 来源

为了实现这一目标,我已将以下内容添加到.travis.yml

language: python
python:
  - '2.7'
  - '3.5'
  - '3.6'
deploy:
  on:
    branch: master
  provider: pypi
  distribution: bdist_wheel sdist

对于正常构建/测试,配置很有效。但是,它引入了竞争条件when deploying to PyPI

Uploading distributions to https://upload.pypi.org/legacy/
Uploading PyOTA-2.0.0b1.tar.gz
HTTPError: 400 Client Error: File already exists. for url: https://upload.pypi.org/legacy/

我应该对.travis.yml做些什么更改才能让Travis CI将正确的人工制品部署到PyPI?

2 个答案:

答案 0 :(得分:5)

我今天遇到了这个问题,并最终找到了这个记录不足的宝石:

deploy:
  provider: pypi
  skip_existing: true
  ...

我在项目上使用skip_existing: true来获取源和轮子一次发布,即使我测试了几个不同的配置和python版本。便利。有关此resolved github issue的详细信息。我还提交了documentation diff

答案 1 :(得分:4)

有些日子我想在盒子外面;其他日子它只是一个非常大的盒子。

以前,这个项目需要单独的Python 2和Python 3轮子,所以我需要Travis CI使用不同版本的Python来构建轮子。

但是最近我得到了正确构建万向轮的项目,所以现在Travis可以使用任何一个版本的Python构建所有部署工件。

我相应地修改了.travis.ymleverything is working great

deploy:
  on:
    branch: master
    python: '3.6'