Travis pypi包版

时间:2018-02-23 07:58:08

标签: python travis-ci pypi

我已经设置了travis.ci,以便在标记push to master时自动部署到pypi包。

问题是我的setup.py我要指定包版本,有时我会忘记导致非部署包(或Pypi是否会覆盖旧包?)

然而,有没有办法将pypi上的包版本作为分配给提交的标记进行匹配?

1 个答案:

答案 0 :(得分:2)

我已经在我的一个项目中完成了它。

[编辑N°2] 我在这里写了一个小教程:https://github.com/73VW/Publishing-to-PyPI-with-pbr-and-Travis

V1。使用PBR

你可以找到它here on Github

特拉维斯基本上做的是以下几点:

  • 检查提交是否有标记
  • 如果是,请使用正则表达式(/(\d+\.)?(\d+\.)?(\*|\d+)$/
  • 检查格式
  • 如果代码类似于1.0.0,则会将其用于pypi版本。

    您仍然可以将正则表达式转换为匹配v1.0.0之类的标记。使用类似/v?(\d+\.)?(\d+\.)?(\*|\d+)$/

    的内容

    [编辑N°3]这是完全错误的,如果标签与此处描述的https://docs.openstack.org/pbr/3.1.0/semver.html不匹配,则PBR无法定义版本。

我使用PBR来执行此操作。

  

用于以一致的方式管理setuptools打包需求的库。

检查我的存储库中的以下文件:

如果您仍有麻烦,请随时在github上标记我(@ 73VW)或直接在这里询问。

度过愉快的一天。

[编辑]

V2。使用sed

在git中,您可以使用以下命令git describe --abbrev=0 --tags

获取最后一个标记

因此,如果您的设置类似于以下内容:

from setuptools import setup
...

setup(
    ...
    version='NEWVERSIONHERE',
    ...
)

您可以使用shell脚本替换标记版本的NEWVERSIONHERE

我尝试了以下(本地,而不是Travis)并且它有效。

#!/bin/sh

set -xe
TAG=$(git describe --abbrev=0 --tags)

sed -i "s/NEWVERSIONHERE/${TAG}/g" setup.py

-i标志用于在适当位置查找和替换。因此,它会更改您指定的文件。

只需将此代码放在shell脚本中,不要忘记chmod以便能够运行它,然后从Travis运行它。

示例.travis.yml文件:

dist: trusty
sudo: required

language: python
python: 3.6

cache: apt

install:
  - pip install -r requirements.txt
  - chmod 777 YOURSCRIPT.sh

script:
  - your tests here
  - ./YOURSCRIPT.sh

deploy:
  skip_cleanup: true
  provider: pypi
  distributions: sdist bdist_wheel
  on:
    tags: true
    branch:
      - master
      - /(\d+\.)?(\d+\.)?(\*|\d+)$/
  user: YOUR PYPI USERNAME
  password:
  secure: YOUR PYPI ENCODED PASSWORD

希望这有帮助!