Travis pypi 包版本
Travis pypi package version
我已经设置 travis.ci 在标记推送到 master 时自动将包部署到 pypi。
问题是,在我的 setup.py
中,我必须指定包版本,有时我忘记了导致未部署的包(或者 Pypi 会覆盖旧版本吗?)
然而,有没有办法将 pypi 上的包版本匹配为分配给提交的标记?
我已经在我的一个项目中完成了。
[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+)$/
这样的东西
[编辑 N°3] 这是完全错误的,如果标签与此处描述的内容不匹配,PBR 无法定义版本 https://docs.openstack.org/pbr/3.1.0/semver.html.
我用 PBR 做这个。
A library for managing setuptools packaging needs in a consistent manner.
检查我的存储库中的以下文件:
如果您仍有问题,请随时在 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
希望对您有所帮助!
我已经设置 travis.ci 在标记推送到 master 时自动将包部署到 pypi。
问题是,在我的 setup.py
中,我必须指定包版本,有时我忘记了导致未部署的包(或者 Pypi 会覆盖旧版本吗?)
然而,有没有办法将 pypi 上的包版本匹配为分配给提交的标记?
我已经在我的一个项目中完成了。
[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+)$/
[编辑 N°3] 这是完全错误的,如果标签与此处描述的内容不匹配,PBR 无法定义版本 https://docs.openstack.org/pbr/3.1.0/semver.html.
我用 PBR 做这个。
A library for managing setuptools packaging needs in a consistent manner.
检查我的存储库中的以下文件:
如果您仍有问题,请随时在 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
希望对您有所帮助!