pip和pipenv都是常用的Python套件管理工具,但它們的用途和運作方式略有不同。讓我們來看看它們的差異:
pip
- 基本套件安裝器:pip是Python的套件安裝器,是Python Packaging Authority (PyPA)的一部分。它用於從Python Package Index (PyPI)和其他套件索引安裝和管理Python套件。
- 全域和本機安裝:預設情況下,pip會全域安裝套件(除非使用虛擬環境),這可能導致專案間的依賴衝突。
- 無依賴解析:在20.3版之前,pip沒有真正的依賴解析系統,這可能導致安裝或更新一個套件時破壞其他套件。但從20.3版開始,pip引入了一個更穩健的新解析器,可以更好地處理依賴解析。
pipenv
- 管理環境的打包工具:pipenv旨在將所有打包世界的優點(捆綁器、彙編等)帶入Python世界。它會自動為你的專案創建和管理虛擬環境,並在你安裝或移除套件時更新Pipfile中的資訊。
- 依賴解析和鎖定:pipenv為你的專案解析依賴,並在Pipfile.lock中鎖定這些套件的版本,以確保專案可重現。此鎖定文件包括專案運行所需的依賴的精確版本,這有助於避免"在我機器上可以運行"的問題。
- 開發和生產套件:pipenv允許你在Pipfile中區分開發和生產依賴,清楚說明哪些套件是生產必需的,哪些只是開發所需。
- 圖形依賴管理:pipenv提供了一個命令來視覺化專案的依賴圖,這可以幫助理解依賴關係並解決衝突。
這裡是Pipfile和Pipfile.lock的範例:
總結
使用場景:使用pip進行基本套件安裝和管理。對於管理具有更複雜需求(如依賴解析、環境分離和生產/開發套件區分)的專案特定環境和依賴,使用pipenv。
功能:pip更直接,需要手動管理,而pipenv旨在為專案環境和套件管理提供一體化解決方案,使跨不同開發和生產環境管理應用程式更容易。
本質上,雖然pip可以單獨用於簡單的套件管理,但對於更全面的依賴管理和專案環境隔離,pipenv是首選。
Pip常用指令
pip install {package}
pip install {package}=={specific version}
安裝套件
pip install pipenv
安裝pipenv
pip install -r requirements.txt
使用requirements.txt安裝套件
pip freeze
顯示已安裝的套件和版本
pip freeze > requirements.txt
導出包含所有已安裝套件(包括依賴)的文字檔
Pipenv常用指令
pipenv install --python {version}
例:pipenv install --python 3.12
使用特定Python版本創建虛擬環境
pipenv install {package}
pipenv install {package}=={specific version}
安裝套件,解決依賴,並更新Pipfile.lock
pipenv shell
啟動專案的虛擬環境
exit
退出虛擬環境
pipenv lock
更新虛擬環境
pipenv run
在虛擬環境中運行命令
pipenv --rm
刪除虛擬環境
pipenv requirements > requirements.txt
將需求導出為文字檔
pipenv install -r path/to/requirements.txt
使用requirements.txt安裝套件
pipenv sync
如果你想複製一個pipenv環境,只需將Pipfile和Pipfile.lock複製到新文件夾,創建新環境,然後運行此命令。
pipenv requirements > requirements.txt
導出只包含你直接安裝的套件(不含依賴)的文字檔
pipenv --where
顯示專案路徑。例:/ Users/username/myproject
pipenv --venv
顯示虛擬環境位置。例:/ Users/username/.local/share/virtualenvs/myproject-MVwU4I-
常見問題
- 如何創建虛擬環境?
- 打開終端機
- 移動到你的專案資料夾
- 確保你已安裝所需的Python版本。如果沒有,在安裝虛擬環境時會收到錯誤"Python {your version} was not found on your system..."。安裝Python有幾種方法:
- 使用版本管理器 pyenv:此工具允許你安裝多個Python版本並在它們之間切換。要安裝pyenv,可以按照pyenv GitHub頁面上的說明操作。 asdf:與pyenv類似,asdf是一個能夠管理多個運行時版本(包括Python)的版本管理器。安裝說明可以在asdf網站上找到。
- 直接安裝: Windows:你可以從官方Python網站下載Python安裝程序。 macOS:你可以使用Homebrew通過命令brew install python@3.10安裝Python 3.10。 Linux:方法會因發行版而異,但通常可以使用包管理器安裝Python(例如,Ubuntu上使用sudo apt-get install python3.10)。
- 使用pipenv install --python {version}創建虛擬環境
- 為什麼pipenv返回錯誤"RuntimeError: Failed to lock Pipfile.lock"?
pipenv是基於專案/文件夾的環境,所以如果專案已有虛擬環境可能會導致錯誤。解決方法是刪除現有環境然後重新創建。 - 為什麼在導入模組時出現錯誤"ModuleNotFoundError: No module named 'pkg_resources'"?
嘗試啟動虛擬環境並運行pip install --upgrade setuptools。
希望這篇文章能幫助你更好地理解pip和pipenv的使用。如果你有任何問題,歡迎在下方留言討論。
本文轉載自:ARON HACK - Python Pip/Pipenv 套件管理工具詳解與常用指令