我在 github 託管 Python 程式碼,然後將包釋出到 Pypi,通常的操作步驟是,更新完程式碼將提交到 github ,然後手動將包更新到 pypi,這樣比較繁瑣,就想到了使用github+travis-ci 構建一個自動部署環境。
註冊 pypi
訪問pypi.org 點選Register
註冊賬號,記住自己的使用者名稱密碼。
建立 setup.py 檔案
setup.py 檔案放置於包的根目錄,示例內容如下:
#!/usr/bin/env python
from setuptools import setup, find_packages
with open("README.md", "r") as fh:
long_description = fh.read()
with open('requirements.txt') as f:
requirements = [l for l in f.read().splitlines() if l]
setup(name="python-weixin", # 專案名
version="0.3.2", # 版本號
description="Python Weixin API client support wechat-app", #簡介
long_description=long_description, # 長簡介 這裡使用的 readme 內容
long_description_content_type="text/markdown",
license="BSD", # 授權
install_requires=requirements, # 依賴
author="gusibi", # 作者
author_email="xxx@gmail.com", # 郵箱
url="https://github.com/gusibi/python-weixin", # 地址
download_url="https://github.com/gusibi/python-weixin/archive/master.zip",
packages=find_packages(),
keywords=["python-weixin", "weixin", "wechat", "sdk", "weapp", "wxapp"],
zip_safe=True)
複製程式碼
以上特別需要注意的是 packages
引數,用來申明你的包裡面要包含的目錄,這裡使用setuptools自動決定要包含哪些包。
配置 travis-ci
github 提供了多種整合方式,這裡我們選擇 Travis-ci
選擇後訪問 travis-ci.com/profile,如果是第一次使用 travis-ci 可以使用 github 賬號登入,然後選擇對應的 github 庫啟用。
然後在 github 程式碼庫的根目錄新增 .travis.yml
檔案。
language: python
python: # 指定執行環境,這裡會分別在 2.7 和 3.5 執行
- '2.7'
- '3.5'
install:
- pip install -r requirements.txt # 安裝依賴
script: python test_example.py # 如果有單元測試這裡應該執行單元測試
複製程式碼
script 是一個必須的命令,通常如果有單元測試的話這裡應該執行單元測試
新增 Pypi 部署配置
通過在 .travis.yml
中新增 deploy 模組, Travis CI
實現自動部署,
language: python
python:
- '2.7'
- '3.5'
install:
- pip install -r requirements.txt
script: python test_example.py
deploy:
provider: pypi
user: goodspeed # pypi 使用者名稱
password: password # pypi 密碼
on:
python: 2.7
tags: true
branch: master
複製程式碼
在 deploy
部分,我們指定 provider
為 pypi,然後新增 user
、password
。
在 on
部分我們宣告一些特殊的配置,比如:
brance: master
意思是隻有 master 分支才執行打包部署python: 2.7
意思是隻在 python 2.7 版本執行打包部署tags: true
意思是隻有在釋出一個新的版本時才執行打包部署
具體配置參考: Conditional-Releases-with-on
加密密碼
上面的配置使用的是明文密碼,這樣就把pypi 賬號公開了,太不安全。這裡推薦使用 travis-encrypt
加密密碼。
安裝 travis-encrypt
pip install travis-encrypt
複製程式碼
然後在 .travis.yml
所在目錄執行:
travis-encrypt --deploy gusibi python-weixin .travis.yml
Password: # 在這裡輸入pypi 密碼
複製程式碼
這裡
gusibi
python-weixin
需要替換成相對應的 github username 和 repository。命令參考:travis-encrypt
執行完之後password 部分舊會被加密後的祕鑰代替,最終 .travis.yml
內容如下:
language: python
python:
- '2.7'
- '3.5'
install:
- pip install -r requirements.txt
script: python test_example.py
deploy:
provider: pypi
user: goodspeed
password:
secure: cjQdXGKkNpwKmGgEhONtd2YR+PF44gtZgMegv5O3CRsszocaRqxcBdfwi0qz6KupLMWl/WTq+bYtzf42lpytMe7cB/CPA2sCUDEo6qyIE+Brb5J57GUhd9HIhP5F44BHKWzBnYFbgPsQ2k1ckEDJsUp5yyFvUBkQmv3+LOo9Kf492oCQlgnzaGSRtPQaG56XdLKgCZrxdtfteTalTbjQO7w/GNm5lBn4l7iY1qWiQmzFxkUuZu317yAnohdH84fq9Ozov4S3nPNSTt800HjHkXwaBzxMuJ2SJBadZAW/abCvk34IPyvxjy7upNNLq80/yvgYKzxWBklcP9LxJX2Pwk9NtTY1zUEykkwdBVxZShhBXtWDma/yWQp2RdCVZtLS4GTg4X61PMgH0iwzwzGW8LARj2ZMowQoPipUYCJ7qUfyXrxU05ypizWKIIfrqdRh8Twj9Jhyg/fAoRygCoXNtMqwSmomjkwl6f1i+6lAQENdmVKQTesP56r/olXKb4rhrOgyhj7anJd3F/SZ+g8jQFHHGLcaSkEoVXL6BFPDMxYdMRmx5HKonP9uQO74ZdeevkHK0wFzSbjqpKdVzeuYuyPiHnDyooyjGL+2BzE/Zzo5KCNEflAE22kAuAbjXCuJji7+j47QohrlYjmj2+F7NDBE5sJRp3yLJWIEPqLND/k=
on:
python: 2.7
tags: true
branch: master
複製程式碼
將程式碼提交之後,訪問 travis-ci.org 會看到已經觸發了 ci ,正在構建:
這裡有兩個 job 正在同時構建,分別是 python2.7 環境和 python3.5 環境。
但是這時並沒有把包部署到 pypi,還需要在 github releases 頁面重新釋出一個版本來觸發部署
。
參考連結
- [https://github.com/romgar/5minutes/blob/master/content/articles/howto-deploy-python-package-on-pypi-with-github-and-travis.md][https://github.com/romgar/5minutes/blob/master/content/articles/howto-deploy-python-package-on-pypi-with-github-and-travis.md]
- pypi.org
- github.com/gusibi/pyth…
- pypi.org/project/tra…
- docs.travis-ci.com/user/deploy…
最後,感謝女朋友支援和包容,比❤️
也可以在公號輸入以下關鍵字獲取歷史文章:公號&小程式
| 設計模式
| 併發&協程
| note