Python 已安裝套件確認方法總結:pip 指令與依賴檢查指南

1. 介紹

在利用 Python 進行開發或資料分析的過程中,經常會產生「現在安裝了哪些套件?」「各自的版本是什麼?」這樣的疑問。特別是在團隊開發時,或是久未開動的老專案時,確認已安裝套件是必要的作業。 然而,Python 套件的管理有幾種方法,如果不熟悉的話,會迷失該使用哪個指令。這篇文章為了回應「Python 套件 確認」的需求,以 pip 指令為中心,說明取得套件清單的方法、版本確認方法,甚至是依賴關係的可視化工具,以初學者也能理解的方式說明。 另外,也會觸及虛擬環境或 Anaconda 環境等,各種開發環境適合的確認方法。無論是想正式使用 Python 的人,還是日常使用 Python 的工程師,這內容都會很有幫助,請務必看到最後。

2. 取得套件清單的方法(依命令分)

如果想在 Python 中確認已安裝的套件及其版本清單,主要使用「pip 命令」。這裡詳細說明代表性的命令使用方法及其輸出範例。

2.1 pip list 的使用方法

最基本的方法,是在終端機或命令提示字元中輸入以下命令。
pip list
執行此命令後,會列出目前 Python 環境中安裝的所有套件名稱及其版本。例如,會得到如下輸出。
Package      Version
------------ -------
numpy        1.26.4
pandas       2.2.2
requests     2.31.0
主要選項:
  • --outdated 僅顯示可更新的套件。
  pip list --outdated
  • --not-required 僅顯示未被其他套件參照(未被依賴)的套件。
  pip list --not-required
  • --format=columns|freeze|json 可指定輸出格式。例如,想以 JSON 格式輸出的話,就如以下方式。
  pip list --format=json

2.2 pip freeze 的使用方法

pip freezepip list 類似,但會以「requirements.txt」等可利用的格式(package==version)輸出套件資訊。
pip freeze
例如,會得到如下輸出。
numpy==1.26.4
pandas==2.2.2
requests==2.31.0
此格式特別適合用於在其他環境中重現相同的套件構成時(環境重建或分享)。此外,也可以使用以下命令儲存為檔案。
pip freeze > requirements.txt

2.3 pip show 的使用方法

如果想了解特定套件的詳細資訊,就使用 pip show 命令。
pip show 套件名稱
例如,想調查 requests 套件的詳細資訊時,就如以下方式執行。
pip show requests
輸出範例(部分):
Name: requests
Version: 2.31.0
Summary: Python HTTP for Humans.
Home-page: https://requests.readthedocs.io
Author: Kenneth Reitz
Location: /usr/local/lib/python3.11/site-packages
Requires: 
Required-by: 
如此一來,就能確認套件的說明、首頁、依賴關係、安裝位置等各種資訊。 透過適當使用這些命令,即可依據情境進行最適的套件管理。
侍エンジニア塾

3. 在腳本中確認版本的方法

在 Python 腳本中,有時您可能想要直接確認已安裝套件的版本。特別是在程式運作確認、環境差異偵測,或描述版本依賴的處理時等情況下,這會很有幫助。在這裡,我們介紹代表性的確認方法。

3.1 使用 version 屬性

許多 Python 套件都定義了名為 __version__ 的屬性。透過使用它,您可以輕鬆從程式碼中取得版本號碼。範例:顯示 NumPy 的版本
import numpy
print(numpy.__version__)
這樣描述後,會輸出 NumPy 的版本(例如:1.26.4)。

3.2 注意事項:version 未定義的情況

並非所有套件都能使用 __version__ 屬性。特別是小型函式庫或舊版套件,可能沒有定義。在這種情況下,您需要確認官方文件,或嘗試下列方法。

3.3 使用 importlib.metadata 的方法(Python 3.8 以降)

如果使用 Python 3.8 以降,可以使用標準函式庫的 importlib.metadata(或在 3.7 以前安裝 importlib_metadata)來取得已安裝套件的版本資訊。範例:取得 pandas 的版本
from importlib.metadata import version
print(version("pandas"))
這種方法容易對應沒有 __version__ 屬性的套件,因此推薦作為現代化的寫法。

3.4 實務中的活用範例

  • 根據版本分歧處理
  • 在不支援的版本範圍外時顯示警告
範例:版本檢查
import sys
from importlib.metadata import version

if version("numpy") < "1.20.0":
    sys.exit("需要 NumPy 1.20.0 或更高版本。請確認版本。")
這樣,在腳本中也能靈活確認版本的方法,了解這些將有助於預防環境問題並提升品質。

4. 依賴關係的可視化:pipdeptree

Python 專案變得越來越大時,就會出現多個套件相互依賴的狀態。依賴關係變得複雜時,「哪個套件需要哪個?」會變得難以理解,更新或故障排除也容易變得困難。在這種情況下,有用的工具就是「pipdeptree」。

4.1 pipdeptree 是什麼

pipdeptree 是一個命令列工具,能以樹狀結構顯示已安裝的 Python 套件的依賴關係。 這些關係可以一眼看出,因此在發現不必要的套件或衝突時非常方便。

4.2 pipdeptree 的安裝方法

首先使用 pip 安裝 pipdeptree
pip install pipdeptree

4.3 基本用法

安裝後,可以使用以下指令以樹狀形式確認依賴關係。
pipdeptree
輸出範例(部分):
pandas==2.2.2
  - numpy [required: >=1.24.0,<2.0.0, installed: 1.26.4]
  - python-dateutil [required: >=2.8.2, installed: 2.8.2]
    - six [required: >=1.5, installed: 1.16.0]
  - pytz [required: >=2020.1, installed: 2023.3]
像這樣,可以從層級看出每個套件依賴哪些套件。

4.4 常用選項

  • -r(反向模式): 顯示需要指定套件的上層套件。
  pipdeptree -r
  • --warn fail/warn/silence: 控制依賴關係有問題(衝突等)時的警告顯示。
  • --json: 將輸出設為 JSON 格式,能更容易與其他工具整合。

4.5 應用:取得授權資訊或套件管理

pipdeptree 不僅能掌握依賴關係,還能幫助刪除不必要的套件,或解決套件間的衝突。 可用於專案的清理、安全性與授權調查,因此強烈建議學習掌握。 如果覺得依賴關係變得複雜,不妨使用 pipdeptree 檢查整體情況。 下一節將介紹虛擬環境或 conda 環境中的套件確認方法。
年収訴求

5. 虛擬環境與套件確認

Python開發中,經常使用虛擬環境(venv 或 virtualenv 等)或 Anaconda(conda 環境)。由於每個環境安裝的套件不同,因此正確掌握「現在在哪個環境中安裝了什麼」是非常重要的。在這裡,我們介紹如何在虛擬環境或 conda 環境中確認套件的方法。

5.1 虛擬環境(venv、virtualenv)的場合

在啟用虛擬環境的狀態下,使用先前介紹的pip listpip freezepip show命令,即可顯示該虛擬環境內的套件資訊而已。 【虛擬環境的基本流程】
  1. 虛擬環境的建立
   python -m venv myenv
  1. 虛擬環境的啟用(Windows 的情況)
   myenvScriptsactivate
(macOS/Linux 的情況)
   source myenv/bin/activate
  1. 套件清單的確認
   pip list
藉此,可以安全地管理每個專案不同的套件構成。

5.2 conda環境的情況

使用 Anaconda 或 Miniconda 的情況下,套件管理通常使用conda命令。
  • conda 環境的啟用
  conda activate myenv
  • 套件清單的確認
  conda list
conda list執行時,會列出該環境中安裝的所有套件及其版本。 此外,對於特定套件,可以如下確認。
conda list 套件名

5.3 注意事項

  • 如果在未啟用虛擬環境或 conda 環境的情況下執行命令,會顯示全域環境的套件,所以請注意。
  • 透過為每個專案分隔環境,可以防止套件的衝突或動作不良。
如此一來,正確管理每個環境的套件,並在需要時確認,就能讓 Python 開發更加舒適。

6. 總結

在 Python 開發過程中,了解已安裝的套件及其版本,從專案管理和防止問題的觀點來看,非常重要。本文系統性地說明了套件確認方法,提供從初學者到中級者皆有用的資訊。 首先,透過使用「pip list」、「pip freeze」、「pip show」等基本指令,即可輕鬆取得套件清單或詳細資訊。此外,還介紹了在腳本中使用__version__屬性或importlib.metadata來從程式中確認特定套件版本的方法。 另外,若套件間依賴關係複雜,可活用「pipdeptree」以樹狀結構更容易掌握整體情況。此外,在虛擬環境或 conda 環境中,可使用各環境專屬指令來精確管理套件資訊。 透過適當運用這些手法,套件管理將更有效率且安全。特別是在多人開發的專案或需要長期維護的系統中,定期確認套件有助於預防問題。 請務必活用本次介紹的指令與工具,打造更舒適的 Python 開發環境吧。

7. 常見問題(FAQ)

這裡,我們彙整了有關「Python 套件確認」的常見問題及其解答。當您遇到困難或有想知道的事時,請參考此處。

Q1. 如何在 Python 中一併確認所有已安裝的套件?

pip list
pip freeze
執行後,即可顯示所有已安裝套件及其版本。

Q2. 如果只想查詢特定套件的版本呢?

pip show 套件名
即可取得指定套件的詳細資訊。 或者,在 Python 腳本中撰寫
import 套件名
print(套件名.__version__)
來輸出版本也是可能的(不過,有些套件可能沒有準備 __version__ 屬性)。

Q3. 如果想以樹狀形式確認套件的依賴關係呢?

pipdeptree 安裝名為 pipdeptree 的工具後,執行
pipdeptree
,即可以樹狀結構確認已安裝套件的依賴關係。

Q4. 在虛擬環境或 Anaconda(conda)環境中,確認方法不同嗎?

在啟用虛擬環境的狀態下,使用pip listpip freeze,即可顯示該虛擬環境中安裝的套件。 Anaconda/Miniconda 的情況下,則使用
conda list
指令。

Q5. 也可以確認授權資訊嗎?

pip show 套件名某些套件會顯示授權資訊。此外,結合 pipdeptree 或其他外部工具,即可進行授權的一括檢查。

Q6. 如果 pip 指令無法正常運作,該如何處理?

通常是 Python 或 pip 本身未安裝,或路徑設定有問題。
  • 試著加上「python -m」來執行,例如 python -m pip list
  • 升級 pip(python -m pip install --upgrade pip
  • 確認虛擬環境或 Anaconda 環境是否正確啟用 等,請試試看。

Q7. 如果想將套件資訊儲存到檔案中呢?

pip freeze > requirements.txt
執行此指令,即可將目前套件清單儲存為檔案。
侍エンジニア塾