How to solve `externally-managed-environment` error for pip install

date
Jul 8, 2024
slug
python-externally-managed-environment-error
status
Published
tags
Programming
summary
如何解決 pip install 發生的 externally-managed-environment 問題。
type
Post

Introduction

由於我一直以來都不是 Python 的重度使用者,因此 Python 對我來說就是個解決問題的小工具,平常要裝什麼套件都是直接 pip install 下去。
直到我有一天發現執行了 pip install 之後…
我本來一直不太想解決,每次都在後面加上 --break-system-packages 。然而進入了新的實習後,覺得這樣下去不是解決辦法,於是花了點時間理解一下 Python 到底在幹嘛,順便寫這篇做個筆記。

Python Virtual Environment

上面的錯誤訊息中,從這段中我看到了關鍵字 Virtual Environment。
至於為什麼需要 Python 的虛擬環境呢?
根據我的理解,是因為在你有很多 Python 專案的情況下,不同的 Python 專案可能會使用到同一個 pip 套件,然而有機會這兩個專案是用到不同版本的。如果把這個套件安裝在電腦的 Global 環境,但兩個不同的專案使用這個套件需要不同的版本,可能就會有衝突或沒辦法執行的狀況。(若有任何錯誤歡迎指正)
開始下面的說明之前,當然需要安裝先安裝 Python。沒有安裝的話,那就去安裝啊(x
Windows 可以到 Python 官網下載,macOS 和 Linux 則可以開始 Terminal 執行:

建立 Python 虛擬環境

首先需要先進入到自己的 project 資料夾,先使用 pwd 確認自己是不是在正確的路徑下:
接下來在資料夾內建立 venv,最後面的 env 是虛擬環境的名稱,project 資料夾下會建立一個 env 資料夾,也可以改成自己想要的名稱。

啟用 Python 虛擬環境

在你環境的有一個 activate 的檔案,source 之後你的 Terminal 就會使用這個 Python 虛擬環境。

可以 Install 了!

這時候你執行 pip install 後都能正常使用了,你的套件就會被安裝在你的 env 資料夾內。

更快的 pip

在寫這份的時候想到一個用 Rust 寫的 Python 套件管理工具 uv ,執行速度比 pip 快了不少。
安裝的步驟可以參考他的 Github
使用 uv 建立 Python 虛擬環境的步驟跟上面差不多,一開始也是先建立虛擬環境,不過這次 uv 就會自己幫你取資料夾名稱了。
然後跟上面一樣啟用這個環境就可以了。

uv pip install

安裝的指令也很直覺,在 pip install 前面加一個 uv,剩下就跟 pip install 一樣了。
你甚至可以在你的 ~/.zshrc 或是其他的 Shell 設定檔裡面,把 uv pip 替換成 pip,這樣之後你只要打 pip install 就好XD

Reference

 

© Ricky 2023 - 2024