魔力竟然這麼大 Python 開發人員為什麼都這麼中意Pipenv
新方法:Pipenv
Pipenv 旨在解決幾個問題:
首先,需要pip
庫來安裝包,外加一個用於建立虛擬環境的庫,以及用於管理虛擬環境的庫,再有與這些庫相關的所有命令。這些都需要管理。Pipenv 附帶包管理和虛擬環境支援,因此你可以使用一個工具來安裝、解除安裝、跟蹤和記錄依賴性,並建立、使用和組織你的虛擬環境。當你使用它啟動一個專案時,如果你還沒有使用虛擬環境的話,Pipenv 將自動為該專案建立一個虛擬環境。
Pipenv 通過放棄requirements.txt
規範轉而將其移動到一個名為Pipfile
的新文件中來完成這種依賴管理。當你使用 Pipenv 安裝一個庫時,專案的Pipfile
會自動更新安裝細節,包括版本資訊,還有可能的 Git 倉庫位置、檔案路徑和其他資訊。
其次,Pipenv 希望能更容易地管理複雜的相互依賴關係。你的應用程式可能依賴於某個特定版本的庫,而那個庫可能依賴於另一個特定版本的庫,這些依賴關係如海龜般堆疊起來。當你的應用程式使用的兩個庫有衝突的依賴關係時,你的情況會變得很艱難。Pipenv 希望通過在一個名為Pipfile.lock
的檔案中跟蹤應用程式相互依賴關係樹來減輕這種痛苦。Pipfile.lock
還會驗證生產中是否使用了正確版本的依賴關係。
另外,當多個開發人員在開發一個專案時,Pipenv 很方便。通過pip
工作流,凱西可能會安裝一個庫,並花兩天時間使用該庫實現一個新功能。當凱西提交更改時,他可能會忘記執行pip freeze
來更新requirements.txt
檔案。第二天,傑米拉取凱西的改變,測試就突然失敗了。這樣會花費好一會兒才能意識到問題是在requirements.txt
檔案中缺少相關庫,而傑米尚未在虛擬環境中安裝這些檔案。
因為 Pipenv 會在安裝時自動記錄依賴性,如果傑米和凱西使用了 Pipenv,Pipfile
會自動更新幷包含在凱西的提交中。這樣傑米和凱西就可以節省時間並更快地運送他們的產品。
最後,將 Pipenv 推薦給在你專案上工作的其他人,因為它使用標準化的方式來安裝專案依賴項和開發和測試的需求。使用pip
工作流和requirements.txt
檔案意味著你可能只有一個requirements.txt
檔案,或針對不同環境的多個requirements.txt
檔案。例如,你的同事可能不清楚他們是否應該在他們的膝上型電腦上執行專案時是執行dev.txt
還是local.txt
。當兩個相似的requirements.txt
檔案彼此不同步時它也會造成混淆:local.txt
是否過時了,還是真的應該與dev.txt
不同?多個requirements.txt
檔案需要更多的上下文和文件,以使其他人能夠按照預期正確安裝依賴關係。這個工作流程有可能會混淆同時並增加你的維護負擔。
使用 Pipenv,它會生成Pipfile
,通過為你管理對不同環境的依賴關係,可以避免這些問題。該命令將安裝主專案依賴項:
pipenv install
新增--dev
標誌將安裝開發/測試的requirements.txt
:
pipenv install--dev
使用 Pipenv 還有其他好處:它具有更好的安全特性,以易於理解的格式繪製你的依賴關係,無縫處理.env
檔案,並且可以在一個檔案中自動處理開發與生產環境的不同依賴關係。你可以在文件
中閱讀更多內容。
使用 Pipenv
使用 Pipenv 的基礎知識在官方 Python 包管理教程管理應用程式依賴關係
部分中詳細介紹。要安裝 Pipenv,使用pip
:
pip install pipenv
要安裝在專案中使用的包,請更改為專案的目錄。然後安裝一個包(我們將使用 Django 作為例子),執行:
pipenv install django
你會看到一些輸出,表明 Pipenv 正在為你的專案建立一個Pipfile
。
如果你還沒有使用虛擬環境,你還會看到 Pipenv 的一些輸出,說明它正在為你建立一個虛擬環境。
然後,你將看到你在安裝包時常看到的輸出。
為了生成Pipfile.lock
檔案,執行:
pipenv lock
你也可以使用 Pipenv 執行 Python 指令碼。執行名為hello.py
的上層 Python 指令碼:
pipenv run python hello.py
你將在控制檯中看到預期結果。
啟動一個 shell,執行:
pipenv shell
如果你想將當前使用requirements.txt
檔案的專案轉換為使用 Pipenv,請安裝 Pipenv 並執行:
pipenv install requirements.txt
這將建立一個 Pipfile 並安裝指定的requirements.txt
。考慮一下升級你的專案!
瞭解更多
檢視 Pipenv 文件,特別是Pipenv 的基本用法 ,以幫助你進一步學習。Pipenv 的建立者 Kenneth Reitz 為 Pipenv 在最近的 PyTennessee 發表了一篇演講:“Python 依賴管理的未來 ”。這次演講沒有被記錄下來,但他的幻燈片 有助於理解 Pipenv 所做的以及解決的問題。