【问题标题】:Travis pypi package versionTravis pypi 包版本
【发布时间】:2018-08-03 06:04:33
【问题描述】:

我已将 travis.ci 设置为在标记推送到 master 时自动将包部署到 pypi。

问题是在我的setup.py 中我必须指定包版本,有时我会忘记导致未部署的包(或者 Pypi 会覆盖旧包?)

尽管如此,有没有办法将 pypi 上的包版本匹配为分配给提交的标签?

【问题讨论】:

    标签: python travis-ci pypi


    【解决方案1】:

    我已经在我的一个项目中做到了。

    [EDIT N°2]我写了一个小教程,你可以在这里找到:https://github.com/73VW/Publishing-to-PyPI-with-pbr-and-Travis

    V1。使用 PBR

    你可以找到它here on Github

    Travis 的基本工作如下:

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

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

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

    我使用PBR 来执行此操作。

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

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

    如果还有问题,欢迎在github上tag我(@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
    

    希望这会有所帮助!

    【讨论】:

    • 有没有办法让travis根据标签设置版本?它构建了标签,但是我如何告诉 travis 将版本添加为 git 中的版本?我真的需要为这个琐碎的、强制性的任务使用额外的包吗?
    • 我不确定是否能正确理解您的问题。英语不是我的母语。就我的项目而言,当 travis 遇到与正则表达式匹配的标签时,它会部署到 pypi。从那时起, pbr 会做其他所有事情。它获取标签并将其分配为包版本。我不知道任何其他方式,但可能有。您可以从 git 获取标签,然后将其“sed”到您的设置文件或类似文件中。如果我不回答您的问题,请告诉我。
    • 这很清楚,我在问 Trevis 是否可以在不需要安装 PBR 的情况下为我做到这一点。
    • 好吧,我放心了哈哈。我不能告诉你 Travis 是否可以在没有 PBR 的情况下做到这一点,但这是 我发现 并且 我知道 轻松做到这一点的唯一方法。可能还有其他方法。
    • @EsseTi 我用另一种方式更新了我的答案。希望这可以帮助!如果是这种情况,请接受我的回答。祝你有美好的一天。
    猜你喜欢
    • 2019-04-03
    • 2020-07-26
    • 2014-08-15
    • 2020-08-24
    • 2014-09-01
    • 2021-08-18
    • 1970-01-01
    • 2013-10-21
    • 2014-09-26
    相关资源
    最近更新 更多