Python Pip/Pipenv 套件管理工具詳解與常用指令

閱讀時間約 7 分鐘

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的範例:

Pipfile example

Pipfile example

總結

使用場景:使用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-

常見問題

  1. 如何創建虛擬環境?
    • 打開終端機
    • 移動到你的專案資料夾
    • 確保你已安裝所需的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}創建虛擬環境
  2. 為什麼pipenv返回錯誤"RuntimeError: Failed to lock Pipfile.lock"?
    pipenv是基於專案/文件夾的環境,所以如果專案已有虛擬環境可能會導致錯誤。解決方法是刪除現有環境然後重新創建。
  3. 為什麼在導入模組時出現錯誤"ModuleNotFoundError: No module named 'pkg_resources'"?
    嘗試啟動虛擬環境並運行pip install --upgrade setuptools。

希望這篇文章能幫助你更好地理解pip和pipenv的使用。如果你有任何問題,歡迎在下方留言討論。


本文轉載自:ARON HACK - Python Pip/Pipenv 套件管理工具詳解與常用指令

    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    許多大型語言模型(LLM)開始允許使用者將自己的資料餵進模型中,像是 OpenAI 的 ChatGPT 和 Anthropic 的 Claude。有了這個功能,你可以上傳你的部落格文章、程式碼或資料集來客製化模型的回應。在這篇文章中,你將學習如何從你的 WordPress 網站提取內容並餵給...
    CKIP-Transformer 是一個繁體中文的自然語言處理 (NLP) 模型,雖然速度偏慢,但是在切詞、詞性標記和命名實體識別等方面都有很優秀的表現。然而,CKIP-Transformer 的輸出並非完美無缺,有時需要額外的資料清理才能進行後續應用。
    在 Visual Studio Code(VSCode)或是其分支專案(如 Cursor)中,當你執行 Python 程式碼時(使用 Shift + Enter),預設會在終端機中顯示輸出結果。這種執行方式會執行整個程式,使用上非常不方便,因為你沒辦法只執行部分程式碼並檢查變數。
    日本NHK最近製作了一部關於中國文件外洩的調查報導,內容中有相當大的篇幅聚焦在台灣。雖然由外國媒體報導不免顯得諷刺,但也增加了記錄片的公信力與客觀性。以下為完整中文版。
    安裝 Llama 2 方法1. 使用官方指南安裝 Llama 2 Meta官方提供的Llama 2安裝方法很容易出錯,你需要先在Meta的網站上申請權限,然後執行Git Repository中的shell腳本來下載模型。當你嘗試執行模型時,可能會遇到以下錯誤: UserWarning: A
    在程式實驗室中,有一個方塊是「播放指定動作」。根據官方文件,這個方塊可以將凱比機器人的動作ID賦予給一個變數,再讓凱比做出該動作。這樣只需要更改變數中的動作ID,就可以讓凱比做出不同的動作。
    許多大型語言模型(LLM)開始允許使用者將自己的資料餵進模型中,像是 OpenAI 的 ChatGPT 和 Anthropic 的 Claude。有了這個功能,你可以上傳你的部落格文章、程式碼或資料集來客製化模型的回應。在這篇文章中,你將學習如何從你的 WordPress 網站提取內容並餵給...
    CKIP-Transformer 是一個繁體中文的自然語言處理 (NLP) 模型,雖然速度偏慢,但是在切詞、詞性標記和命名實體識別等方面都有很優秀的表現。然而,CKIP-Transformer 的輸出並非完美無缺,有時需要額外的資料清理才能進行後續應用。
    在 Visual Studio Code(VSCode)或是其分支專案(如 Cursor)中,當你執行 Python 程式碼時(使用 Shift + Enter),預設會在終端機中顯示輸出結果。這種執行方式會執行整個程式,使用上非常不方便,因為你沒辦法只執行部分程式碼並檢查變數。
    日本NHK最近製作了一部關於中國文件外洩的調查報導,內容中有相當大的篇幅聚焦在台灣。雖然由外國媒體報導不免顯得諷刺,但也增加了記錄片的公信力與客觀性。以下為完整中文版。
    安裝 Llama 2 方法1. 使用官方指南安裝 Llama 2 Meta官方提供的Llama 2安裝方法很容易出錯,你需要先在Meta的網站上申請權限,然後執行Git Repository中的shell腳本來下載模型。當你嘗試執行模型時,可能會遇到以下錯誤: UserWarning: A
    在程式實驗室中,有一個方塊是「播放指定動作」。根據官方文件,這個方塊可以將凱比機器人的動作ID賦予給一個變數,再讓凱比做出該動作。這樣只需要更改變數中的動作ID,就可以讓凱比做出不同的動作。
    你可能也想看
    Google News 追蹤
    上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
    Thumbnail
    在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
    Thumbnail
    在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
    from win32com.client import Dispatch path = "D:\PROGRAMMING\PythonCode\pypptx\image1.png" # 启动PowerPoint应用程序 ppt = Dispatch('PowerPoint.Applicatio
    Thumbnail
    套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
    Thumbnail
    在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
    Thumbnail
    當你想讓原本函式新增其他功能,又不想更動原本函式時,Python提供了一種強大而靈活的工具,那就是裝飾器。 但對於新手來說這個裝飾器,非常抽象難以理解,讓我們繼續往下看,慢慢的抽絲剝繭吧。 在 Python 中,使用「@」當做裝飾器使用的語法糖符號
    Thumbnail
    本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
    Thumbnail
    解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
    Thumbnail
    Python 裝飾器(Decorator),它能夠讓你在不改變原始函式的情況下,增加額外的功能。本文將介紹 Python 裝飾器(Decorator)的基本概念、實現方式,並提供實際應用範例讓你更好了解Python 裝飾器。
    上兩篇有關List的文章,此篇文上兩章的延續,整理一些常用的方法和操作。 [Python]List(列表)新增、修改、刪除元素 [Python基礎]容器 list(列表),tuple(元組) 還有一些常用的 list 方法和操作,讓你能更靈活地處理列表數據
    Thumbnail
    在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
    Thumbnail
    在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
    from win32com.client import Dispatch path = "D:\PROGRAMMING\PythonCode\pypptx\image1.png" # 启动PowerPoint应用程序 ppt = Dispatch('PowerPoint.Applicatio
    Thumbnail
    套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
    Thumbnail
    在 Python 中,dir() 函式用於列舉對象的所有屬性和方法。這包括對象的內建屬性、方法以及自定義的屬性和方法。以下是一個簡單的示例: 列舉所有屬性與方法 class MyClass: def __init__(self): self.attribute1 = 42
    Thumbnail
    當你想讓原本函式新增其他功能,又不想更動原本函式時,Python提供了一種強大而靈活的工具,那就是裝飾器。 但對於新手來說這個裝飾器,非常抽象難以理解,讓我們繼續往下看,慢慢的抽絲剝繭吧。 在 Python 中,使用「@」當做裝飾器使用的語法糖符號
    Thumbnail
    本文介紹了Python中函式引數的*args和**kwargs用法,通過*args處理可變數量的位置引數,通過**kwargs處理可變數量的關鍵字引數。不僅介紹了相應的語法和程式範例,還解釋了它們的順序問題和建議的慣例用法。
    Thumbnail
    解決 setuptools 的問題: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. 解決方法 目前
    Thumbnail
    Python 裝飾器(Decorator),它能夠讓你在不改變原始函式的情況下,增加額外的功能。本文將介紹 Python 裝飾器(Decorator)的基本概念、實現方式,並提供實際應用範例讓你更好了解Python 裝飾器。