快轉到主要內容

解決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、cuDNN、TensorRT專有驅動程式
分類   Linux系統 Linux使用技巧
標籤   Arch Linux Nvidia

留言板

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

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

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