travis集成pypi自动发布开源库

travis是GitHub上知名的ci/cd工具,我们自己编写的python库可以利用travis实现自动部署到pypi,免去了我们因为遗忘导致pypi上的开源库版本滞后的现象。

编辑.travis文件

这里假设读者已经注册了travis账号并绑定了自己的github账户,没有注册同学可以自行去注册一下。

以博主自己的开源库sf-sdk为例,首先要编写一个.travis文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
language: python
notifications:
email: false
sudo: false
python:
- '3.6'
install:
- pip install -r requirements.txt
script:
- python -m sf.tests.test_order
deploy:
provider: pypi
user: blackcat
on:
python: 3.6
tags: true
branch: master
password:
secure: xMlol7prP3byFnfLgchz5rSE4xflxOOLzO9RA8sYJ5lwtDIRDW6FwZ1QaFd1tBIj1ElEFhPTN5oGUYpL344SDfVJR4QxsMVFs/A2JpU/Qno497GAPf9TFwkkRSCXGJ0U6l5s1PZQof1qNYilLQE3SJhsVC2+ZUYPEVvDxHdlMlLvx4oN7zNjgWQRXTBA3wHYWxMFTVK2UMNYUpeYdCaXu2d/Lgb1QA6SbAZMH0ldVxHLSkvJg/jDkiiJSVUle76N88ZrVa5g5s/QpQXfAnSvvsz4wPj9oSoZAhong9p5sQsA6PBXbLfCsqrDNTkn5g1bFO9OMhl0atZUYoFNPlHuMaJb+jOhMASQGZQdh/K3KIQKFf19h+l3QBg3b3wTFtwtVOj43n88SmaWgLxjWYEfXv2uBp30QQV+qgFEJwRv/K1Yc4Nzg7/VeqJVJ7om9GPsfDVpd5mOtCZO32KcknfbrL6d5sDwR5YzKMc3+Zoes9yH/8SsGCSkmSZTMsAh8uP7/XqRtMYbpnBskn6OXTIyYE5M1E6y9UPKid8Qr7aS74jZ0gTbD3IawE8XbWuOfNIbxciUmQSqaVzxjtyTVUISW3bkHJToQhgtPdHJ6/gOguiHMwWBWuN/erlmmKArsklEnWibXJ0eJXaacwDbz5bNApYWTUHcpo3Mq7XBdMJCmn0=
  • python:指定版本
  • script: 运行单元测试脚本
  • user: 填写你的pypi账号
  • password: pypi的账号,安全起见,将密码加了密

pypi密码加密

如果上面的配置使用的是明文密码,这样就把pypi账号公开了,太不安全。这里推荐使用 travis-encrypt 加密密码。

1
pip3 install travis-encrypt

然后在 .travis.yml 所在目录执行:

1
travis-encrypt --deploy block-cat sf-sdk .travis.yml

这里的block-cat和sf-sdk要替换你的GitHub账号和仓库名

构建

当你提交代码之后,会在travis看到触发ci的构建进程:

推送新版本到pypi

我们前面写的.travis中有一个条件,只有当我们推送tag到github时,才会触发部署到pypi的动作,这样就能避免因为多次提交导致pypi拒绝同版本的提交问题。

给项目添加build图标

要想让我们的项目显得bigger高一点,给自己的项目价格图标吧:

将上图中的代码贴到README.md文件中就行了。

增加测试覆盖率

首先,我们使用pytest来测试我们的测试脚本,然后使用coverage来统计覆盖率,因此,我们需要在requirements.txt文件中增加如下代码:

1
2
3
pytest
coverage
python-coveralls

同样的,我们使用github账号注册coveralls网站,添加我们的项目。

然后编辑.travis.yaml文件:

1
2
after_success:
coveralls

再次提交我们的代码,就可以看到覆盖率了: