本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
最近一有空就來學一點 Python,補充這接下來頗看好的語言工具知識!如果已經有學過幾套程式語言的話大部分人應該會先下手解決一個彈性問題:環境。
正如同 NodeJS 這套工具有 NPM 作為套件管理,而 Python 也一樣有不少很棒的套件可以呼叫,那..套件管理的作法或是工具?
Python 界的大大 KR 在 2016 年時寫了一份「管理流程」的文章。 經過一些資料的研究,也發現是常見大家使用的作法。
透過 pip
& virtualenv
兩個工具的組合應用完成環境建置。
- pip,處理安裝套件用
- virtualenv,建立虛擬目錄執行環境(Standalone)
首先使用 virtualenv 的作用是建立一個獨立運行 Python 環境,而後進入到資料夾內「啟動」這個環境: source bin/activate
,接下來在這個資料夾內使用 pip 安裝的套件屬於「本地端」非「全域(系統端)」。整個環境的建立到使用套件都要特別注意「版本」的問題,目前 Python 2.7.x ~ 3.7.x 都還是服役中的版本,而大版本(2, 3)的差異可以說是要當作不同情境處理了。
離開 Python 這個虛擬的運行環境只需要輸入
deactivate
指令即可。
不論是在虛擬環境中運作還是直接全域下操作都不會不行,這屬於管理議題。
pip 這個套件安裝工具可以在確定一個執行環境(包含所有專案關聯套件)後進行輸出套件資料,僅需 pip freeze > requirements.txt
如此一行指令輸出當前所安裝的套件。
但!就是太簡陋了,以及之後對於套件更新也不友善,所以 KR 提出了一個作業流程:
- 進入專案目錄後先使用一個複製出來的輸出檔案
requirements-to-freeze.txt
來下指令pip install -r requirements-to-freeze.txt --upgrade
更新所有套件。 pip freeze > requirements.txt
再輸出更新後的套件與其對應版本。
但!! 儘管如此,這其實還是不夠,也太複雜。專案所操作到的套件版本沒有一個管理還有沒有對套件做驗證,這樣對大量使用套件有很強的相依問題的專案在其中一個套件有問題時連鎖反應壞掉。
所以 KR 大大又開發了一套管理工具(汗顏)叫做「Pipenv」,這套工具整合了虛擬環境與套件管理的好處,並且解決了管理上的流程。目前也是官方建議的管理工具!很值得從這邊下手~
中文介紹可以參考「Pipenv 更簡單、更快速的 Python 套件管理工具」
透過這套工具可以把執行環境以及套件管理整合一起,讓開發者在不同環境下運作以及使用套件也不用怕流程上少做了什麼事。
至於 Python 本身的版本切換問題也還有看到一個工具可以協助:Pyenv。有需要測試版本兼容問題的時候可以參考。