使用github+travis將Python包部署到Pypi

goodspeed發表於2018-07-25

我在 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

使用github+travis將Python包部署到Pypi

選擇後訪問 travis-ci.com/profile,如果是第一次使用 travis-ci 可以使用 github 賬號登入,然後選擇對應的 github 庫啟用。

使用github+travis將Python包部署到Pypi

然後在 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,然後新增 userpassword

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 ,正在構建:

使用github+travis將Python包部署到Pypi

這裡有兩個 job 正在同時構建,分別是 python2.7 環境和 python3.5 環境。

但是這時並沒有把包部署到 pypi,還需要在 github releases 頁面重新釋出一個版本來觸發部署

參考連結


最後,感謝女朋友支援和包容,比❤️

也可以在公號輸入以下關鍵字獲取歷史文章:公號&小程式 | 設計模式 | 併發&協程 | note

使用github+travis將Python包部署到Pypi

相關文章