2025年11月22日 星期六

在樹莓派新版 OS (Trixie) 上安裝 Python 套件的方法

這幾天在 Pi 400 的樹莓派 OS Trixie 上測試 Python 程式, 得知從 Bookworm 版本開始, Raspberry Pi OS 就遵循 PEP 668 限制, 禁止在系統 Python 安裝第三方套件, 必須建立虛擬環境去安裝, 然後進入虛擬環境執行 Python 程式. 如果在系統環境只能使用預載的套件 (例如 requests) : 

pi@raspberrypi:~ $ python   
Python 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd    # pandas 不是系統預載套件
Traceback (most recent call last):
  File "<python-input-0>", line 1, in <module>
    import pandas as pd
ModuleNotFoundError: No module named 'pandas'
>>> import requests      # requests 是系統預載套件
>>> 

我以為建立虛擬套件並在其內安裝好第三方套件即可, 但實測發現套件雖然順利安裝, 但是匯入時卻出現 "無效指令" 並跳出 Python 互動環境 : 

pi@raspberrypi:~ $ source myenv/bin/activate   
(myenv) pi@raspberrypi:~ $ python  
Python 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yfinance as yf   
無效指令
(myenv) pi@raspberrypi:~ $

詢問 ChatGPT 答覆說可能是這些套件不支援 Python 3.13, 叫我安裝較舊的 Python, 我就比照一切跑得順順的 LG Gram 筆電, 下載編譯安裝 Python 3.10.14, 參考 :


然後建立虛擬環境安裝套件, 例如 yfinance, 但是問題仍然存在 :

pi@raspberrypi:~ $ source myenv310/bin/activate 
(myenv310) pi@raspberrypi:~ $ python   
Python 3.10.14 (main, Nov 19 2025, 21:45:00) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yfinance as yf  
無效指令
(myenv310) pi@raspberrypi:~ $ 

今天與 ChatGPT 進一步討論這問題, 它這時才提到說可能是缺少開發套件與編譯依賴, 有些套件例如 pandas, numpy, pandas-ta, 與 yfinance 等不是純 Python, 而是 C extension/Cython 編譯的套件, 需要在安裝時編譯 .so 檔, 且編譯過程依賴 libffi, zlib, readline, ncurses, 與 sqlite3 等系統套件, 如果這些依賴沒有安裝, pip 會在安裝時編譯失敗或跳過某些 C module, 套件雖然安裝完成, 但 import 時會因為 C extension 不存在或無法載入, Python REPL 就會出現 "無效指令" 而不是丟 exception. 

總之, 在虛擬環境中安裝套件之前, 還必須用 apt 安裝下表套件 (不早一點說, 害我白花時間去下載編譯安裝 Python 3.10) :


 套件  用途
 build-essential  安裝 GCC 與編譯器工具,用於編譯 Python 擴充套件
 libssl-dev  支援 HTTPS、SSL、Python 的 ssl 模組
 zlib1g-dev  支援壓縮功能,啟用 gzip、zipfile 等模組
 libncurses5-dev / libncursesw5-dev  提供互動終端介面支援(如 Python 互動輸入、編輯器)
 libreadline-dev  支援 command line 操作時的輸入、歷史紀錄
 libffi-dev  讓 Python 的 ctypes 和 cffi 模組正常工作
 libsqlite3-dev  支援 Python 內建 sqlite3 資料庫模組
 libbz2-dev  bz2 壓縮支援,啟用 Python 的 bz2 模組
 liblzma-dev  LZMA 壓縮支援,啟用 Python 的 lzma 模組(例如 tar.xz)
 libgdbm-dev  支援 Python shelve / dbm 資料儲存模組
 libdb-dev  支援 Berkeley DB,啟用 dbm 模組
 libexpat1-dev  支援 XML parsing,啟用 Python 的 xml parser 模組
 libmpdec-dev  支援 decimal 模組的高精度數學運算
 tk-dev  啟用 tkinter GUI 支援(可視介面)
 uuid-dev  支援 Python 的 uuid 模組,用於生成唯一識別碼


所以, 其實系統的 Python 3.13 必須先用 apt 安裝這些套件後, 再建立虛擬環境來安裝第三方套件, 這樣 pandas 等依賴 C extension 的套件才能正常匯入使用, 先更新套件清單 :

sudo apt update
sudo apt upgrade -y

然後執行下列指令即可 :  

sudo apt install -y python3.13-venv python3.13-dev build-essential libssl-dev zlib1g-dev libncurses5-dev libncursesw5-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev wget curl llvm

安裝完成後建立一個虛擬環境 myenv313 : 

pi@raspberrypi:~ $ python3.13 -m venv ~/myenv313 

進入虛擬環境 : 

pi@raspberrypi:~ $ source myenv313/bin/activate   

然後在此虛擬環境下安裝套件 :


1. 資料科學基礎套件 : 

pip install numpy==2.2.6
pip install pandas
pip install scipy
pip install matplotlib
pip install seaborn
pip install bokeh
pip install plotly
pip install scikit-learn

註 : 因 pandas-ta 0.4.71b 依賴 numpy 2.2.6, 故先行指定此版本. 


2. 深度學習框架 : 

pip install torch torchvision torchaudio


3. Web UI : 

pip install django
pip install streamlit  
pip install gradio

註 : streamlit 依賴許多 C extension, 與樹莓派 Trixie 的 Python 3.13 部分不相容, 會導致 Python 執行環境崩潰, 勿安裝. 


4. 爬蟲 : 

pip install html5lib
pip install selenium
pip install scrapy


5. 量化投資 : 

pip install yfinance
pip install twstock
pip install mplfinance
pip install ta
pip install kbar
pip install backtrader
pip install pyfolio-reloaded


6. Bot 套件 : 

pip install line-bot-sdk
pip install python-telegram-bot


7. LLM 套件 : 

pip install openai
pip install google-generativeai


8. 開發工具 : 

pip install jupyterlab


安裝完後測試看看能否正常匯入套件 : 

pi@raspberrypi:~ $ source ~myenv313/bin/activate
(myenv313) pi@raspberrypi:~ $ python   
Python 3.13.5 (main, Jun 25 2025, 18:55:22) [GCC 14.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import yfinance as yf  
>>> yf.__version__ 
'0.2.66'
>>> import pandas_ta as ta  
>>> ta.version   
'0.4.71b0'

可見 pandas-ta 已經是最新版 0.4.71b 了. 

回顧之前在 Bookworm 上遇到的無法匯入已安裝好的第三方套件問題, 其原因也是如此, 沒有先安裝 C extension/Cython 開發套件與編譯依賴就直接在虛擬環境下用 pip 安裝套件, 貌似順利安裝完成, 但其實過程中找不到 C extension 依賴檔就跳過, 誤以為安裝成功所致. 既然在最新版的 Trixie 上已找到問題原因並解決了, 那也沒必要回去用 Bookworm 啦. 

如果要用 Thonny 開發 Python 應用, 須至 "工具/選項/直譯器" 選單中, 設定 Python 直譯器為 :

home/pi/myenv313/bin/python

沒有留言 :