利用Docker進行Python庫的多版本測試與發布
由於Python 2和Python 3的長期分裂,對今天的Python庫作者來說,同時支持兩者是一個比較重要的要求。再加上2.7、3.3、3.4、3.5每個版本都有些許區別,然而每個版本目前都有用戶,進行庫的測試和發布就變成一件苦力活了,要在自己的環境里維護一大堆Python版本,小心翼翼保持他們互相不衝突,還得記住不同版本Python的調用方法。以前聽說有一些解決方案,今天試了一下docker,發現這個問題使用Docker解決起來非常簡單。
假設我們目前的機器上已經裝好了docker-engine,如果沒有,可以參考docker的官方文檔,不再贅述。Python有官方docker鏡像,除了已經被拋棄的2.6以外,2.7、3.3、3.4、3.5甚至是最新的alpha版本都有,只需要使用docker pull就可以下載到相應的版本然後直接運行:
docker pull python:2.7
一般不使用latest。要讓官方鏡像運行本機的Python文件,只要把整個目錄都作為卷掛載進去,然後在該目錄中運行鏡像中的Python就可以了。
我寫了一個腳本用來一次性進行多版本的Python test & build:
#!/bin/bashif [ "$1" == "--notest" ]; then echo "Skip test." test="" shiftelse test="test "fitarget=$1target=${target-vlcp}for version in 2.7 3.3 3.4 3.5do echo "building $version..." docker run --rm -v /opt/gitrepo/$target:/opt/target python:$version bash -c "pip install --upgrade wheel setuptools pip; cd /opt/target; python setup.py $test sdist bdist_egg bdist_wheel"done
不知道為什麼官方的3.4和3.5的鏡像中沒有wheel,所以我們在啟動的時候都裝成最新的。我的git目錄在/opt/gitrepo/xxx下面,可以替換成自己的目錄。
腳本運行完之後,直接用twine工具進行twine upload就可以一次性上傳所有版本的
除了Python以外,PyPy也是支持的:
docker pull pypy:2
注意PyPy:2和PyPy:3分別對應Python 2和Python 3的版本。
推薦閱讀:
※用Python為直方圖繪製擬合曲線的兩種方法
※只針對 Python 爬蟲,該如何學習?
※Python 中列表和元組有哪些區別?
※自動處理excel數據,用什麼語言合適?