将所有运行时工件从 TravisCI 部署到 PyPi

Posted

技术标签:

【中文标题】将所有运行时工件从 TravisCI 部署到 PyPi【英文标题】:Deploy all runtime artifacts from TravisCI to PyPi 【发布时间】:2018-11-17 23:17:40 【问题描述】:

我有一个针对多个 Python 运行时(2.7、3.3-6)交叉编译的 Python 包。我正在尝试使用 TravisCI 构建该包并将其部署到 PyPi。但是,特定版本标记的每个运行时变体都会产生一个同名的工件:mypackage-0.11.10.tar.gz。因此,PyPi 只接受第一个运行时变体。

重申一下:给定版本(例如,0.11.10)的 构建 在每个运行时(2.73.3、...、3.6)中都会成功,但每个其中有相同的工件:mypackage-0.11.10.tar.gz。我想要的是 mypackage-0.11.10-py27.tar.gz 之类的东西,或者任何合适的东西。

我可能遗漏了一些东西,我可以确信,如果我能够针对每个运行时进行构建工作,我很高兴......但我缺乏这种信心,并且不知道一个好的方法来测试一下。

其中的一个子组件就是如何更改 TravisCI 发送到 PyPi 的工件的文件名?我无法确定是否有任何方法可以做到这一点。

这是我的.travis.yml 文件:

language: python
python:
- '2.7'
- '3.3'
- '3.4'
- '3.5'
- '3.6'
- pypy
install:
- pip install coveralls
- pip install 'coverage<4'
script: nosetests --with-coverage --cover-package=<my package name>
after_success:
- coveralls
deploy:
  provider: pypi
  user: <my pypi username>
  password:
    secure: <my encrypted pypi password>
  on:
    tags: true
    distributions: sdist bdist_wheel
    repo: <my repo>
    branch: production

【问题讨论】:

【参考方案1】:

.tar.gz 表明这是一个源代码分发。一个版本不能有多个源分发。但是您可以有许多二进制***,每个***用于不同的 Python 版本和架构。

【讨论】:

以上是关于将所有运行时工件从 TravisCI 部署到 PyPi的主要内容,如果未能解决你的问题,请参考以下文章

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

詹金斯从工件加载文件时出错

如何将 npm 包发布/部署到自定义工件

Jenkins - 在作业删除时删除已部署的工件

从 nexus 获取最新的构建工件

当它有父pom时如何正确地将工件部署到nexus?