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 套件管理工具詳解與常用指令

留言
avatar-img
留言分享你的想法!
avatar-img
ARON HACK 亞倫害的沙龍
23會員
34內容數
2024/10/24
許多大型語言模型(LLM)開始允許使用者將自己的資料餵進模型中,像是 OpenAI 的 ChatGPT 和 Anthropic 的 Claude。有了這個功能,你可以上傳你的部落格文章、程式碼或資料集來客製化模型的回應。在這篇文章中,你將學習如何從你的 WordPress 網站提取內容並餵給...
Thumbnail
2024/10/24
許多大型語言模型(LLM)開始允許使用者將自己的資料餵進模型中,像是 OpenAI 的 ChatGPT 和 Anthropic 的 Claude。有了這個功能,你可以上傳你的部落格文章、程式碼或資料集來客製化模型的回應。在這篇文章中,你將學習如何從你的 WordPress 網站提取內容並餵給...
Thumbnail
2024/10/24
CKIP-Transformer 是一個繁體中文的自然語言處理 (NLP) 模型,雖然速度偏慢,但是在切詞、詞性標記和命名實體識別等方面都有很優秀的表現。然而,CKIP-Transformer 的輸出並非完美無缺,有時需要額外的資料清理才能進行後續應用。
Thumbnail
2024/10/24
CKIP-Transformer 是一個繁體中文的自然語言處理 (NLP) 模型,雖然速度偏慢,但是在切詞、詞性標記和命名實體識別等方面都有很優秀的表現。然而,CKIP-Transformer 的輸出並非完美無缺,有時需要額外的資料清理才能進行後續應用。
Thumbnail
2024/10/24
在 Visual Studio Code(VSCode)或是其分支專案(如 Cursor)中,當你執行 Python 程式碼時(使用 Shift + Enter),預設會在終端機中顯示輸出結果。這種執行方式會執行整個程式,使用上非常不方便,因為你沒辦法只執行部分程式碼並檢查變數。
Thumbnail
2024/10/24
在 Visual Studio Code(VSCode)或是其分支專案(如 Cursor)中,當你執行 Python 程式碼時(使用 Shift + Enter),預設會在終端機中顯示輸出結果。這種執行方式會執行整個程式,使用上非常不方便,因為你沒辦法只執行部分程式碼並檢查變數。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
介紹朋友新開的蝦皮選物店『10樓2選物店』,並分享方格子與蝦皮合作的分潤計畫,註冊流程簡單,0成本、無綁約,推薦給想增加收入的讀者。
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
當你邊吃粽子邊看龍舟競賽直播的時候,可能會順道悼念一下2300多年前投江的屈原。但你知道端午節及其活動原先都與屈原毫無關係嗎?這是怎麼回事呢? 本文深入探討端午節設立初衷、粽子、龍舟競渡與屈原自沉四者。看完這篇文章,你就會對端午、粽子、龍舟和屈原的四角關係有新的認識喔。那就讓我們一起解開謎團吧!
Thumbnail
pip和pipenv都是常用的Python套件管理工具,但它們的用途和運作方式略有不同。讓我們來看看它們的差異...
Thumbnail
pip和pipenv都是常用的Python套件管理工具,但它們的用途和運作方式略有不同。讓我們來看看它們的差異...
Thumbnail
教大家如何使用 pip 備份 python 虛擬環境,並移植到其他電腦之中,詳細圖文解說
Thumbnail
教大家如何使用 pip 備份 python 虛擬環境,並移植到其他電腦之中,詳細圖文解說
Thumbnail
在Python中安裝套件通常是通過pip這個工具來完成的。 pip是Python的包管理器,用於安裝和管理Python套件 在Python中安裝套件通常是通過pip這個工具來完成的。 pip是Python的包管理器,用於安裝和管理Python套件。以下是基本的安裝步驟: 確認p
Thumbnail
在Python中安裝套件通常是通過pip這個工具來完成的。 pip是Python的包管理器,用於安裝和管理Python套件 在Python中安裝套件通常是通過pip這個工具來完成的。 pip是Python的包管理器,用於安裝和管理Python套件。以下是基本的安裝步驟: 確認p
Thumbnail
pip 的安裝、使用,多種功能一一展示,完整教學
Thumbnail
pip 的安裝、使用,多種功能一一展示,完整教學
Thumbnail
相信玩過Python一陣子的朋友應該曾經都遇到過套件版本衝突的問題吧…, 這實在是很惱人, 但如果我們能夠快速的檢驗我們所安裝的套件是否如我們所預期的版本, 該有多好, 如此一來能夠讓自己更加安心一些, 那麼今天將提供兩種方法讓我們來檢查一番。 列出所有套件及版本 簡單且暴力。 pip lis
Thumbnail
相信玩過Python一陣子的朋友應該曾經都遇到過套件版本衝突的問題吧…, 這實在是很惱人, 但如果我們能夠快速的檢驗我們所安裝的套件是否如我們所預期的版本, 該有多好, 如此一來能夠讓自己更加安心一些, 那麼今天將提供兩種方法讓我們來檢查一番。 列出所有套件及版本 簡單且暴力。 pip lis
Thumbnail
pip下載與安裝的過程太久嗎? 網路斷線怎麼辦? 內網需求怎麼達成?…, 相信這幾個心中的疑問在我們開發Python的過程中都會遇到, 尤其是一個完整的套件需要依賴上千百種的額外套件時, 這個過程真的是非常久啊! 難道我們不能加速嗎? 看到這篇的您非常的幸運, 我們會實際教您如何架設本地端的Pyth
Thumbnail
pip下載與安裝的過程太久嗎? 網路斷線怎麼辦? 內網需求怎麼達成?…, 相信這幾個心中的疑問在我們開發Python的過程中都會遇到, 尤其是一個完整的套件需要依賴上千百種的額外套件時, 這個過程真的是非常久啊! 難道我們不能加速嗎? 看到這篇的您非常的幸運, 我們會實際教您如何架設本地端的Pyth
Thumbnail
⏳ 優質好文,歡迎支持與學習,讓阿Han給你最歡樂的學習課程、最貼近業界的實戰技巧…,just for fun fun fun…😄 相信對於具有開發基礎的學員們來說,基本的開發工程相信已經得心應手了, 那麼您們可能會苦於這些問題: ❓ 哇! pip install別人的程式好方便
Thumbnail
⏳ 優質好文,歡迎支持與學習,讓阿Han給你最歡樂的學習課程、最貼近業界的實戰技巧…,just for fun fun fun…😄 相信對於具有開發基礎的學員們來說,基本的開發工程相信已經得心應手了, 那麼您們可能會苦於這些問題: ❓ 哇! pip install別人的程式好方便
Thumbnail
Hi, 大家好。我是茶桁。 在我们之前的课程中,讲解了数据,函数,类,模块以及包。这些基本上已经构成了Python的全部了。 那么,我们在学习Python的包之后,有没有思考过,既然Python有内置模块,我们也可以自己写一些模块来使用,那一定有很多第三方写过相应的模块来供我们使用。那么,这
Thumbnail
Hi, 大家好。我是茶桁。 在我们之前的课程中,讲解了数据,函数,类,模块以及包。这些基本上已经构成了Python的全部了。 那么,我们在学习Python的包之后,有没有思考过,既然Python有内置模块,我们也可以自己写一些模块来使用,那一定有很多第三方写过相应的模块来供我们使用。那么,这
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News