快轉到主要內容

解決Linux pip install的"error: externally-managed-environment" 錯誤,改用虛擬環境安裝套件

分類   Linux系統 Linux使用技巧
標籤   Python
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

在安裝Python 3.11以上版本的Linux系統,如果執行pip install指令,可能會遇到以下錯誤:

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

error: externally-managed-environment這個錯誤見於新版的Ubuntu、Arch Linux、Fedora、openSUSE、Raspberry Pi OS等系統,macOS的Homebrew用戶可能也會遇到。

老實說這個不是錯誤,是開發者故意設計的行為,詳細提案內容見2021年的 PEP 668。這樣做是為了防止Python的套件跟Linux系統套件管理員衝突。有時候Python套件一加入環境變數,便可能讓APT混淆Linux系統與Python的套件。或者,依賴Python程式的套件可能因為Python版本更新而壞掉。

但是這樣就不能pip install了呀!該怎辦?

這有很多種解決方法。就Linux系統維護的角度來看,我不建議強行破除此限制。建議學習改用較為安全的Python套件安裝方式。

這又可以分為「Python虛擬環境」和「pipx安裝法」。

1. 改用Python虛擬環境安裝pip套件
#

第一種方式是使用Python虛擬環境 (virtual environment),也就是安裝Python套件前都先用venv建立一個虛擬環境,讓Python的套件跟Linux系統套件隔離,再於裡面安裝pip。此外,虛擬環境也可以防止不同專案的Python套件互相衝突。

  1. 從Linux套件庫安裝Python虛擬環境工具
sudo apt install python3-venv
  1. 在家目錄建立一個叫做venv的虛擬環境,實際上就是一個新目錄:
cd ~

python3 -m venv venv
  1. 然後用以下指令進入虛擬環境
source venv/bin/activate
  1. 就可以正常用pip install安裝套件了。所有pip install安裝的套件都會跑到venv這個虛擬環境的目錄下。
pip install yt-dlp
  1. 日後要執行虛擬環境裡面的程式,都必須先進入才可啟用
source venv/bin/activate

yt-dlp --version

註:Python虛擬環境依賴的是Linux系統所安裝的Python版本,若要更進階的虛擬環境操作請裝 Anaconda,允許你同時安裝多重Python版本。

2. 改用pipx安裝Python套件
#

第二種方式適合習慣pip install的用戶。

你可能會覺得Python虛擬環境比pip install還麻煩了呀!每次都要跑一次進入虛擬環境的指令。

如果你想裝的Python程式是單一執行檔,希望Python pip套件安裝後可以直接從命令行執行?此時「pipx」就是一個好用的工具。它指令長得跟pip install很像,會給每個安裝的Python套件自動建立虛擬環境,並連結到對應的執行檔。這樣我們就能無縫使用新安裝的Python套件。

  1. 參照 Github指示,從Linux套件庫安裝pipx:
sudo apt install pipx
  1. 讓pipx將必要路徑加入環境變數
pipx ensurepath
  1. 這樣就可以用pipx安裝原本pip的套件了,例如yt-dlp
pipx install yt-dlp
  1. 安裝後可直接從命令行使用
yt-dlp --version

一些技術性細節:

  • pipx安裝的套件預設會放到~/.local/bin,這裡存放的是各個Pyhton套件的符號連結檔,實際會指向~/.local/share/pipx/venvs/目錄的虛擬環境。因為~/.local/bin被加入環境變數,所以使用者才能從命令行執行pipx安裝的程式。
  • pipx所安裝的套件只有目前使用者可用。若要讓全系統使用者可用,需要使用pipx ensurepath --global
  • pipx沒有切換Python版本的功能。

參考資料
#

相關文章

Linux如何解除安裝軟體並刪除乾淨
分類   Linux系統 Linux使用技巧
標籤   Ubuntu Flatpak Snap AppImage
給Linux螢幕進行色彩管理,套用ICC設定檔,並調整螢幕色溫
分類   Linux系統 Linux使用技巧
標籤   Linux Wayland Color Management
教你在Arch Linux安裝Nvidia專有驅動、CUDA、NVIDIA Container Toolkit
分類   Linux系統 Linux使用技巧
標籤   Arch Linux Nvidia

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。