我已经设置了travis.ci,以便在标记push to master时自动部署到pypi包。
问题是我的setup.py
我要指定包版本,有时我会忘记导致非部署包(或Pypi是否会覆盖旧包?)
然而,有没有办法将pypi上的包版本作为分配给提交的标记进行匹配?
答案 0 :(得分:2)
我已经在我的一个项目中完成了它。
[编辑N°2] 我在这里写了一个小教程:https://github.com/73VW/Publishing-to-PyPI-with-pbr-and-Travis
你可以找到它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)或直接在这里询问。
度过愉快的一天。
在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
希望这有帮助!