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

我在 github 託管 Python 代碼,而後將包發佈到 Pypi,一般的操做步驟是,更新完代碼將提交到 github ,而後手動將包更新到 pypi,這樣比較繁瑣,就想到了使用github+travis-ci 構建一個自動部署環境。python

註冊 pypi

訪問pypi.org 點擊Register註冊帳號,記住本身的用戶名密碼。git

建立 setup.py 文件

setup.py 文件放置於包的根目錄,示例內容以下:github

#!/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 文件。bash

language: python
python:   # 指定運行環境,這裏會分別在 2.7 和 3.5 運行
 - '2.7'
 - '3.5' 
install:
 - pip install -r requirements.txt   # 安裝依賴
script: python test_example.py  # 若是有單元測試這裏應該執行單元測試
複製代碼

script 是一個必須的命令,一般若是有單元測試的話這裏應該執行單元測試markdown

添加 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,而後添加 userpasswordapp

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 頁面從新發佈一個版原本觸發部署

參考連接


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

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

相關文章
相關標籤/搜索