【適合新手】Python 套件管理徹底解析|pip・venv・Poetry 的差異與使用指南

目次

1. 介紹

為什麼 Python 的套件管理很重要?

Python 是一種語法簡單且易讀的程式語言,從初學者到專業工程師都廣泛使用。然而,實際開始開發時,常常會遇到「這段程式碼不知為何無法運作」「找不到模組」這樣的障礙。其中許多原因,都在於套件的管理方法。 在 Python 中,僅使用標準函式庫就能完成的開發很少見,在許多情況下都需要額外安裝外部套件(函式庫)來使用。此時,如果正確安裝、管理和更新套件的機制不完善,就會導致專案崩壞,或是與他人共同開發時出現障礙。

不以「pip install」為止的套件管理世界

對於初次接觸 Python 的人來說,「用pip install安裝就 OK」的想法是很自然的。確實,僅此而已就能輕鬆新增函式庫。然而,當專案增加時,
  • 其他專案與套件的版本衝突
  • 舊版本導致錯誤發生
  • 只在生產環境無法正常運作
會面臨這樣的問題。這是套件管理知識不足所引發的典型麻煩

本篇文章可以學習的內容

本篇文章將以初學者也能輕鬆理解的方式,系統性地說明 Python 的套件管理。具體來說,將處理以下內容:
  • Python 中的「套件」是什麼?
  • pip、venv、Poetry 等工具的使用區分方式
  • 使用虛擬環境的原因及其活用方法
  • 套件管理中容易發生的錯誤及其應對方法
  • 常見問題及其解答
不僅是單純的使用方法列舉,還會觸及為什麼需要這麼做、該如何選擇等背景,一邊說明。

2. Python 中的套件是什麼?

套件是什麼?與模組的差異

Python 中的「套件」是指,將多個模組(Python 檔案)彙整在一起的目錄結構的程式庫。在 Python 中,為了提高再利用性,便利的函數或類別以檔案單位作為模組提供,進一步整理・構成這些的就是「套件」。 例如,requests 這個處理 HTTP 通訊的熱門套件中,包含多個檔案(=模組),這些檔案作為一個套件運作。
術語內容
模組.py 副檔名的 Python 檔案(例:math.py
套件彙整模組的資料夾結構(包含 __init__.py

使用套件的理由

在 Python 開發進展中,套件是不可或缺的。因為僅靠標準程式庫無法補足的功能(資料解析、機器學習、Web 通訊等),透過使用外部套件就能輕鬆導入・實作。 此外,Python 社群有許多優秀的套件,有助於高效的開發和高品質程式碼的實現。

Python Package Index(PyPI)是什麼?

許多套件都在「PyPI(Python Package Index)」這個官方儲存庫公開。PyPI 是彙整全球開發者建立・公開的 Python 套件的巨大資料庫,使用 pip 指令就能從這裡輕鬆安裝套件。
pip install numpy
執行上述指令時,pip 會參照 PyPI 搜尋 numpy 套件,並進行下載・安裝。

pip 安裝套件的機制

pip 是 Python 官方的套件管理工具,以以下流程運作。
  1. 參照 PyPI(或指定 URL)取得套件資訊
  2. 下載最新或指定版本的套件
  3. 若有必要的依賴套件,則一併安裝
  4. 儲存至本機環境的 site-packages 資料夾
安裝後,在 Python 腳本中可以如下使用。
import numpy as np

arr = np.array([1, 2, 3])
print(arr)

總結:理解套件是避免問題的第一步

透過理解 Python 中套件的機制,就能預防「找不到模組」「舊版本無法運作」等常見問題。下一節將更詳細說明用來導入・管理此類套件的基礎工具「pip」。
侍エンジニア塾

3. 基本的套件管理工具「pip」

pip 是什麼?

pip是 Python 中最基本的套件管理工具。從 Python 3.4 開始,它已標準安裝,無需額外設定即可使用。主要角色包括 外部套件的安裝、解除安裝、升級、列表顯示 等。 pip 的名稱是「Pip Installs Packages」的縮寫,正如其名所示,它是 Python 套件安裝的命令列工具。

pip 的基本指令與用法

以下彙整 pip 中常用且具代表性的指令及其用途。
指令說明
pip install 套件名安裝套件
pip uninstall 套件名解除安裝套件(刪除)
pip list顯示目前安裝的套件清單
pip show 套件名顯示指定套件的詳細資訊
pip freeze顯示已安裝套件與版本(後述的 requirements.txt 中使用)
pip install -r requirements.txt一括安裝多個套件(專案分享時便利)
使用範例(命令列):
pip install requests
pip list
pip uninstall requests

requirements.txt 是什麼?

requirements.txt專案中使用的套件及其版本資訊彙整的檔案。在多人開發或將專案移至其他環境時,這個檔案非常方便。 內容會如下所示:
requests==2.31.0
numpy>=1.24
使用此檔案,即可透過以下指令進行一括安裝。
pip install -r requirements.txt

升級與版本指定

pip 可以進行套件的 升級版本指定
  • 升級至最新版時:
pip install --upgrade 套件名
  • 指定特定版本進行安裝:
pip install 套件名==1.2.3

相依性問題與注意事項

pip 雖然簡單易用,但管理複雜相依性時較弱。例如,某套件所需版本與另一套件要求版本衝突的情況。 其結果,
  • 無法安裝
  • 執行時發生錯誤
  • 其他套件損壞
可能導致此類問題。為避免此類問題,可導入後述的虛擬環境(venv)或更進階工具(Poetry 等)。

總結:pip 是基礎,但不可過度依賴

pip 是 Python 開發的基礎中的基礎,在小型腳本或個人開發中,有時僅此即可足夠。然而,在相依性複雜化或開發環境差異的專案中,僅用 pip 管理會變得困難 的情況也有。下一節將詳細說明解決此類問題的「虛擬環境(venv)」用法。

4. 使用虛擬環境(venv)的理由與用法

為什麼需要虛擬環境?

在 Python 開發過程中,常見每個專案使用的套件種類或版本不同。例如:
  • 專案 A 使用 Django 3.2
  • 專案 B 使用 Django 4.0
在這種情況下,如果將套件安裝到整個系統,就會發生升級一方時另一方無法運作的問題。為了避免此問題而引入的就是「虛擬環境」。 使用虛擬環境,可以為每個專案進行獨立的套件管理,實現不與其他環境干涉的開發。

什麼是 venv?

venv 是 Python 標準的虛擬環境建立工具。從 Python 3.3 開始標準搭載,不需要額外安裝。使用 venv,可以為每個專案建立獨立的 Python 執行環境與套件群

venv 的基本操作

1. 虛擬環境的建立
在任意的專案資料夾內執行以下指令。
python -m venv venv
此指令會建立名為「venv」的資料夾,並建構虛擬環境(資料夾名稱任意,但慣例使用 venv)。
2. 虛擬環境的有效化
  • Windows
venv/Scripts/activate
  • macOS / Linux
source venv/bin/activate
有效化成功時,終端機開頭會顯示 (venv) 等。
3. 虛擬環境的無效化
要離開虛擬環境時,執行以下指令。
deactivate
4. 虛擬環境的刪除
虛擬環境僅是資料夾,因此只需刪除 venv 目錄即可。
rm -r venv  # mac/Linux
rd /s /q venv  # Windows

使用 venv + pip 安全地建構環境

在虛擬環境有效化的狀態下執行 pip install,套件會安裝到虛擬環境內,不會影響整個系統。因此,可以防止對本番環境或別的專案的惡影響。
source venv/bin/activate
pip install requests
在此狀態下安裝的程式庫,在離開虛擬環境(deactivate)後就無法使用了。

與 IDE 的聯動(VSCode 等)

近年許多工程師使用的 Visual Studio Code(VSCode)等編輯器,具有自動偵測虛擬環境,並為每個專案切換 Python 執行環境的功能。與 venv 結合,可以大幅提升開發效率與環境穩定性。

總結:虛擬環境是 Python 開發的基礎技能

Python 的虛擬環境(venv)是避免套件版本衝突或環境問題的必備技能。與 pip 結合使用,可以建構安全且可重現的開發環境。
侍エンジニア塾

5. 依賴關係管理工具「Poetry」的活用

pip 和 venv 單獨使用不足的原因

pipvenv 是 Python 開發中的基本工具,但當專案變得複雜或需要團隊開發時,會出現以下挑戰。
  • 依賴關係增加時,requirements.txt 容易變成手動管理
  • 在多個環境中重現套件的狀態很困難
  • 套件的公開與建置很麻煩
應對這些挑戰的,就是名為 Poetry(Poetry) 的套件與專案管理工具。

Poetry 是什麼?

Poetry 是一款現代化的工具,能夠整合管理 Python 專案的 依賴關係・虛擬環境・套件公開。它具有以下特點:
  • pyproject.toml 中一元管理依賴資訊
  • 自動建立和管理虛擬環境
  • 無需手動設定 pipvenv
  • 也能建置和公開套件(支援 PyPI)
使用 Poetry,即可實現 「專注於撰寫程式碼」 的開發環境。

Poetry 的安裝方法

Poetry 使用官方腳本安裝。執行以下指令,即可依據 OS 安裝。
curl -sSL https://install.python-poetry.org | python3 -
安裝後,可用以下指令確認版本:
poetry --version

使用 Poetry 建立專案與依賴管理

1. 專案的新規建立
poetry new 專案名稱
此指令會自動產生以下 Python 專案的雛形。
專案名稱/
├── pyproject.toml
├── README.rst
├── 專案名稱/
│   └── __init__.py
└── tests/
    └── __init__.py
2. 在現有專案中使用 Poetry 的情況
在現有的資料夾中執行以下:
poetry init
以對話形式註冊依賴關係,並產生 pyproject.toml
3. 套件的新增・刪除
  • 新增(安裝):
poetry add requests
  • 刪除:
poetry remove requests
4. 虛擬環境的自動建立與執行
Poetry 在新增依賴關係時,會自動建立虛擬環境。以下可進入該環境:
poetry shell
虛擬環境內即可使用 Python 和 pip。
5. 透過鎖定檔案確保再現性
Poetry 會將依賴關係的資訊記錄在名為 poetry.lock 的檔案中。藉此,其他開發者即可重現完全相同的環境
poetry install
此指令可基於 pyproject.tomlpoetry.lock 建置精確的環境。

pyproject.toml 的角色

在 Poetry 中,不使用傳統的 setup.pyrequirements.txt,而是將所有設定集中在單一檔案 pyproject.toml 中。 範例:
[tool.poetry]
name = "myproject"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.10" requests = "^2.31.0"
[build-system]
requires = ["poetry-core"] build-backend = "poetry.core.masonry.api"
藉由此結構,即可實現 以程式碼管理專案狀態 的理想環境。

總結:Poetry 是現代開發的強力夥伴

Poetry 能從傳統 pip 和 venv 的繁瑣管理中解放,提供強大的開發支援工具。特別推薦給以下人士:
  • 進行多人開發的人
  • 希望明確化套件依賴關係的人
  • 希望自動化虛擬環境建置的人
  • 未來希望公開套件的人

6. 與其他工具的比較(Poetry vs pipenv vs conda)

套件管理工具應依用途選擇

Python 的套件管理,除了 pipvenv 之外,還有幾個方便的工具。代表性的有以下三個:
  • Poetry:依賴關係管理+套件建置強大的現代工具
  • Pipenv:pip 和 venv 的中間存在。對初學者友善但有些不穩定
  • conda:資料科學導向的環境建置強大,可管理 Python 以外的語言
各自都有優點和缺點,因此,依專案目的或開發風格選擇最適合的工具非常重要

各工具的比較表

以下以表格彙整 Poetry・Pipenv・conda 的主要差異:
項目PoetryPipenvconda
虛擬環境的管理自動建立・管理自動建立・管理專屬環境(conda)
依賴關係的明確化pyproject.toml & poetry.lockPipfile & Pipfile.lockenvironment.yml
Python 以外的語言對應◯(R、C、Java 等)
套件的建置・公開◯(PyPI 對應)△(無法公開)
跨平台對應△(部分有問題)
開發的現代性・一致性△(有些笨重)
主要用途Web 開發・公開初學者導向開發資料分析・科學計算

各工具的特點與適合的情境

Poetry:實現開發者導向的最佳實務
Poetry 是最重視「作為專案的 Python 開發」的工具。依賴關係的管理、虛擬環境的自動化、套件的公開等,全都可一致管理,因此,在中級~上級開發者中非常受歡迎適合的人:
  • Web 應用程式或 API 等,正式開發 Python 製應用程式的人
  • 想在 PyPI 公開自製套件的人
  • 在團隊開發中重視組態檔案再現性的人
Pipenv:旨在取 pip 和 venv 的「優點」的工具
Pipenv 整合了 pipvenv 的功能,提供對初學者易於處理的 UI。使用 Pipfile 這種專屬格式管理依賴關係,並自動建立虛擬環境。 不過,更新頻率已降低,在部分環境中報告有不穩定動作或問題,因此最近轉向 Poetry 的案例增加中。 適合的人:
  • 對 pip 或 venv 稍有習慣的初學者
  • 想從學習用或小規模專案開始的人
  • 喜歡指令少且直覺的操作的人
conda:管理包含 Python 以外的廣泛環境
conda 是包含在 Anaconda 發行版中的套件管理工具,不限於 Python,還能管理 R 或 C 等環境。特別是在科學技術計算或資料分析的現場備受重視。 套件的依賴解決能力非常高,能輕鬆處理複雜的函式庫(NumPy、TensorFlow、OpenCV 等),這是很大的優點。 適合的人:
  • 想在資料科學、機器學習、統計解析領域活用的人
  • 想同時管理 Python 以外的語言的人
  • 在 Windows 環境中為套件依賴關係苦惱的人

選擇的指引

猶豫時,以以下方式思考就能更容易選擇。
  • 開發者・公開導向 → Poetry
  • 學習目的・輕量環境 → Pipenv(或 venv+pip)
  • 資料分析・多語言環境 → conda

總結:依目的選擇工具是成功的關鍵

Python 的套件管理,因為工具豐富而容易迷失。不過,只要明確「要用在什麼目的」,最適合的工具自然會浮現。 Poetry・Pipenv・conda,各自有優點和適合的場景,依自己的開發風格或團隊體制選擇,就能建構更順暢且高再現性的開發環境。

7. 實踐例:專案別的環境建置步驟

為什麼環境建置步驟很重要?

即使知道套件管理工具的使用方法,如果不知道在實際專案中如何開始使用,那就沒有意義了。在這裡,我們將以兩種模式說明專案設定的步驟,讓初學者也能毫不猶豫地進行。
  • pip + venv 使用的基本建置方法
  • Poetry 使用的智慧建置方法

模式①:使用 pip + venv 的專案建置

這是最基本的方法,推薦給剛開始 Python 的人。 步驟 1:建立專案資料夾
mkdir my_project
cd my_project
步驟 2:建立並啟用虛擬環境
python -m venv venv
source venv/bin/activate  # Windows 的情況下使用 venv\Scripts\activate
步驟 3:安裝必要的套件
pip install requests numpy
步驟 4:將依賴套件寫入 requirements.txt
pip freeze > requirements.txt
步驟 5:停用虛擬環境
deactivate
以這種配置,其他開發者就能根據requirements.txt來重現環境:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

模式②:使用 Poetry 的專案建置

使用 Poetry 後,就不需要手動管理虛擬環境或依賴關係,能夠進行高效的開發。 步驟 1:專案初始化
poetry new my_project
cd my_project
這樣就會自動產生以下結構。
my_project/
├── pyproject.toml
├── README.rst
├── my_project/
│   └── __init__.py
└── tests/
    └── __init__.py
步驟 2:新增必要的程式庫
poetry add requests numpy
Poetry 會在這個階段自動建立虛擬環境,並在pyproject.tomlpoetry.lock中記錄依賴關係。 步驟 3:進入虛擬環境(選用)
poetry shell
步驟 4:其他人重現環境的方法 在分享專案時,只需以下指令就能重現相同的環境:
poetry install
這樣,所有依賴關係就會精確安裝,虛擬環境也會自動產生。

應該選擇哪種方法?

情境推薦工具
學習目的,首先想熟悉 Pythonpip + venv
團隊開發,需要明確化與自動化依賴關係Poetry
考慮公開或發佈程式庫Poetry
輕量的一時腳本或驗證pip(無虛擬環境)也可以

補充:與 VSCode 等 IDE 的整合

Visual Studio Code 或 PyCharm 等 IDE 具有自動辨識虛擬環境或 Poetry 虛擬環境的功能。開啟專案資料夾後,會自動選擇適當的 Python 解釋器,因此在編輯器上也能毫不猶豫地切換環境

總結:一致的環境建置才是品質與重現性的關鍵

在 Python 開發中,無論誰製作都能以相同方式運作的環境是非常重要的。正確使用 pip + venv 或 Poetry 就能實現這一點。

8. 常見錯誤與對策

為什麼套件管理容易發生錯誤?

Python 雖然是一種靈活的語言,但由於套件的版本、依賴關係以及虛擬環境的差異,容易發生意想不到的錯誤。特別是初學者容易遇到的問題,有幾種模式存在。 在這裡,我們介紹典型的錯誤及其解決方法。

錯誤①:ModuleNotFoundError – 找不到模組

錯誤內容:
ModuleNotFoundError: No module named 'requests'
原因:
  • 套件未安裝
  • 未啟用虛擬環境
  • 在不同的 Python 環境中執行
對策:
  • 確認是否在正確的環境中安裝套件
pip install requests
  • 確認虛擬環境是否啟用並重新啟用
source venv/bin/activate  # 或 venv\Scripts\activate
  • 如果使用 VSCode 等 IDE 執行,確認 Python 解釋器的選擇

錯誤②:pip install 時發生 Permission denied 或存取拒絕

錯誤內容(例):
PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.x/site-packages/...'
原因:
  • 試圖在全域環境中安裝套件
  • 以無管理員權限的使用者執行
對策:
  • 確認是否在虛擬環境中作業
  • 如果一定要在全域環境執行,則附加 --user 選項
pip install --user 套件名稱
  • Mac/Linux 的情況下,需要管理員權限的操作使用 sudo(不推薦)

錯誤③:版本衝突(依賴關係衝突)

錯誤內容(例):
ERROR: Cannot install X==1.2.0 and Y==2.0.0 because these package versions have incompatible dependencies.
原因:
  • 同時安裝的多個套件依賴不同版本的相同程式庫
對策:
  • 使用 pipdeptree 等工具來視覺化並確認依賴關係
  • 使用 Poetry 或 conda 等能自動解決依賴關係一致性的工具
  • 如果衝突無法解決,則分開使用虛擬環境來運作

錯誤④:從 requirements.txt 安裝失敗

錯誤內容:
ERROR: Could not find a version that satisfies the requirement X==1.0.0
原因:
  • requirements.txt 中記載的版本不存在或已被廢止
  • 與自己的 Python 版本不相容
對策:
  • 在 PyPI 確認目標套件和版本的存在
  • 根據 Python 的版本指定相容的版本
  • 使用 Poetry 的情況下,可以使用 poetry update 來更新一致的依賴關係

錯誤⑤:虛擬環境無法正常運作或無法啟用

錯誤內容(例):
source: command not found
原因:
  • 在 Windows 上使用 Unix 系指令
  • 建立虛擬環境時路徑錯誤
對策:
  • 確認各作業系統的虛擬環境啟用指令
# macOS / Linux
source venv/bin/activate

# Windows
venv\Scripts\activate
  • 如果環境損壞,則刪除後重新建立
rm -r venv
python -m venv venv

補充:pip 版本過舊時的不便

pip 本身的版本過舊時,無法對應 PyPI 的最新規格,導致安裝失敗。 對策:
pip install --upgrade pip
定期升級可以更容易防止未來的錯誤。

總結:了解「機制」就不怕錯誤

套件管理相關錯誤大多源自「環境」「依賴關係」「Python 的版本」。不要慌張地試圖各種方法對應,而是解讀錯誤訊息並理解機制來對應,這是 Python 進步的捷徑。

9. 常見問題(FAQ)

Q1. pip和Poetry,應該使用哪一個?

A. 對於小型腳本或學習專案,使用pipvenv的組合就足夠了。然而,在多人開發或套件依賴關係複雜的情況下,Poetry在依賴關係管理上更容易且再現性更高,因此推薦使用

Q2. 虛擬環境一定要使用嗎?

A. 不是必須的,但強烈推薦使用。如果不使用虛擬環境,就會影響系統整體的Python環境,容易發生與其他專案依賴關係衝突等問題。

Q3. pyproject.toml和requirements.txt的差異是什麼?

A.
  • requirements.txt:pip使用的簡單文字格式依賴清單
  • pyproject.toml:Poetry等工具使用的結構化設定檔案(依賴關係+中繼資料)
requirements.txt強調安裝的再現性,pyproject.toml適合專案整體的構成管理。

Q4. pipenv和Poetry哪一個比較主流?

A. 目前Poetry的開發更活躍,在可靠性和功能面也更優越。pipenv曾經一度流行,但由於更新停滯和故障報告增加,逐漸轉向Poetry。

Q5. conda和pip可以併用嗎?

A. 基本上可以併用,但需要注意依賴關係的一致性。在conda環境中,盡量使用conda指令安裝套件,只有conda沒有時才使用pip,這樣可以避免問題。

Q6. 虛擬環境建立太多,管理起來很麻煩。怎麼辦?

A. 使用Poetry的話,虛擬環境的建立和刪除會自動進行,因此手動管理的負擔會大幅減輕。另外,要確認虛擬環境清單或位置,可以使用以下指令:
poetry env list
poetry env remove <環境名稱>

Q7. requirements.txt或pyproject.toml應該加入Git嗎?

A. 是的,為了確保專案的可再現性,必須包含這些檔案。包含這些檔案後,其他開發者就能輕鬆重現相同的環境,讓團隊開發更順暢。

Q8. 可以將生產環境和開發環境的套件分開管理嗎?

A. Poetry可以明確區分開發用和生產用的依賴關係進行管理。例如,可以將測試框架等限定為開發用安裝:
poetry add pytest --group dev
這樣,生產環境就不需要安裝不必要的工具了。

Q9. 發生錯誤時該怎麼辦?

A. 首先冷靜閱讀錯誤訊息,並確認以下重點。
  • 虛擬環境是否已啟用?
  • 使用的Python版本是否相容?
  • 該套件是否存在於PyPI?
另外,請務必參考本章的「8. 常見錯誤與對策」區段。

Q10. 專案有多人開發時,需要注意什麼?

A. 最重要的是「讓環境可再現」。徹底執行以下事項,就能避免問題:
  • 使用虛擬環境
  • 分享requirements.txtpyproject.toml / poetry.lock
  • 明確指定Python版本(例如:Python 3.10以上)
活用Poetry,就能相對輕鬆實現這些。
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール