2025年11月19日 星期三

樹莓派 Pi 400 Rapberry PI OS (Trixie) 安裝 Python 3.10

昨天將 Pi 400 的 Rapberry PI OS (Bookworm) TF 卡換成最新版的 Trixie, 原以為在內建的 Python 3.13 環境下, pandas-ta 等套件的問題就可解決, 但結果卻出乎意料地糟, 舊問題不僅沒解決, 反而因為 Python 版本太新, 某些套件 (例如 Seaborn 與 pandas-ta) 一匯入就讓 Python 3.13 崩潰而跳出 (exit code -4) , 其他套件像 matplotlib 則無問題 :




詢問 ChatGPT, 說可能是因為在 Python 3.13 + ARM64 上的 Seaborn 或其依賴套件不穩定, 導致在某些 API 呼叫中觸發 numpy 或 pandas 的 C extension 崩潰. AI 建議安裝較低版本的 Python, 考慮我的 LG Gram 筆電跑 Python 3.10 安裝各種套件都用得很順 (除了 pandas-ta 須安裝較舊的版本), 所以就叫 ChatGPT 幫我寫了一個一鍵安裝 Python 3.10 的 shell 程式 : 

pi@raspberrypi:~ $ nano install-py310.sh  

#!/bin/bash
set -e

echo "Updating system..."
sudo apt update
sudo apt install -y \
    build-essential checkinstall \
    libreadline-dev libncursesw5-dev libssl-dev \
    libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev \
    libffi-dev zlib1g-dev liblzma-dev libnss3-dev wget

echo "Download Python 3.10.14 source..."
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
sudo tar xzf Python-3.10.14.tgz
cd Python-3.10.14

echo "Configuring, this may take some time..."
sudo ./configure --enable-optimizations --with-ensurepip=install

echo "Compiling (use all cores)..."
sudo make -j$(nproc)

echo "Installing Python 3.10 (without replacing system python)..."
sudo make altinstall

echo "Done! Installed python3.10 and pip3.10"
python3.10 --version
pip3.10 --version

先用 chmod 指令更改權限為可執行 : 

pi@raspberrypi:~ $ chmod +x install-py310.sh   

執行此 shell 程式安裝 Python 3.10 (編譯安裝約需 20 分鐘) :

pi@raspberrypi:~ $ ./install-py310.sh 

... (略) ...
Done! Installed python3.10 and pip3.10
Python 3.10.14
pip 23.0.1 from /usr/local/lib/python3.10/site-packages/pip (python 3.10)

這樣就完成 Python 3.10 的安裝了, 其執行指令是 python3.10 : 

pi@raspberrypi:~ $ ls /usr/local/bin/python*   
/usr/local/bin/python3.10  /usr/local/bin/python3.10-config   

自己編譯安裝的 Python 放在 /usr/local/bin 下, 系統內建的則是放在 /usr/bin 下 :

pi@raspberrypi:~ $ ls /usr/bin/python*  
/usr/bin/python   /usr/bin/python3.13         /usr/bin/python3-config
/usr/bin/python3  /usr/bin/python3.13-config  /usr/bin/python-dotenv

用 python3.10 指令建立一個虛擬環境 myenv310 :

pi@raspberrypi:~ $ python3.10 -m venv myenv310  
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.

檢視儲存空間 : 

(myenv310) pi@raspberrypi:~ $ df -h   
檔案系統        容量  已用  可用 已用% 掛載點
udev            1.6G     0  1.6G    0% /dev
tmpfs           760M  9.5M  750M    2% /run
/dev/mmcblk0p2   59G   12G   44G   21% /
tmpfs           1.9G  488K  1.9G    1% /dev/shm
tmpfs           5.0M   12K  5.0M    1% /run/lock
tmpfs           1.0M     0  1.0M    0% /run/credentials/systemd-journald.service
tmpfs           1.9G   14M  1.9G    1% /tmp
/dev/mmcblk0p1  510M  103M  408M   21% /boot/firmware
tmpfs           380M   88K  380M    1% /run/user/1000
tmpfs           1.0M     0  1.0M    0% /run/credentials/getty@tty1.service

安裝 Python 3.10 之前是 45GB, 可見 Python 3.10 用掉約 1GB. 

接下來在 Python 3.10 虛擬環境安裝工作所需的套件 :  


1. 資料科學基礎套件 : 

pip install numpy==1.26.4   (mplfinance 要求)
pip install pandas
pip install scipy
pip install matplotlib
pip install seaborn
pip install bokeh
pip install plotly
pip install altair
pip install scikit-learn

注意, 為了避免安裝 kbar 時刪除最新的 numpy, 重新下載編譯 numpy 1.26.4 版耗費時間, 此處直接指定安裝 numpy 1.26.4 版. 


2. 深度學習框架 : 

pip install torch torchvision torchaudio


3. Web UI : 

pip install django
pip install streamlit
pip install gradio


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

最後安裝 pandas-ta, 因 PyPi 上是要求 Python >= 3.12 的最新版 0.4.71b, 所以要從 Source Forge 下載支援 Python 3.10 的 pandas-ta 0.3.14b 版 Python 原始碼自行 build 為 whl 檔後安裝 : 


參考 : 


先建立 Python 3.10 的虛擬環境 : 

pi@raspberrypi:~ $ python3.10 -m venv myenv310   
pi@raspberrypi:~ $ source myenv310/bin/activate   
(myenv310) pi@raspberrypi:~ $ 

將下載的 zip 檔解壓縮, 把原始碼資料夾更名為 pandas-ta-0.3.14b 後進去此資料夾 :

(myenv310) pi@raspberrypi:~/ cd 下載  
(myenv310) pi@raspberrypi:~/下載 $ cd pandas-ta-0.3.14b   

先安裝 build 套件 : 

(myenv310) pi@raspberrypi:~/下載/pandas-ta-0.3.14b $ pip install build  
Collecting build
  Downloading build-1.3.0-py3-none-any.whl.metadata (5.6 kB)
Requirement already satisfied: packaging>=19.1 in /home/pi/myenv310/lib/python3.10/site-packages (from build) (25.0)
Collecting pyproject_hooks (from build)
  Downloading pyproject_hooks-1.2.0-py3-none-any.whl.metadata (1.3 kB)
Requirement already satisfied: tomli>=1.1.0 in /home/pi/myenv310/lib/python3.10/site-packages (from build) (2.3.0)
Downloading build-1.3.0-py3-none-any.whl (23 kB)
Downloading pyproject_hooks-1.2.0-py3-none-any.whl (10 kB)
Installing collected packages: pyproject_hooks, build
Successfully installed build-1.3.0 pyproject_hooks-1.2.0

執行 python -m build : 

(myenv310) pi@raspberrypi:~/下載/pandas-ta-0.3.14b $ python -m build    
... (略) ...

build 完成後進入 dist 子資料夾 :

(myenv310) pi@raspberrypi:~/下載/pandas-ta-0.3.14b $ cd dist  
(myenv310) pi@raspberrypi:~/下載/pandas-ta-0.3.14b/dist $ ls -ls     
總用量 360
216 -rw-rw-r-- 1 pi pi 219862 11月 20 00:34 pandas_ta-0.3.14b0-py3-none-any.whl   
144 -rw-rw-r-- 1 pi pi 144836 11月 20 00:34 pandas_ta-0.3.14b0.tar.gz

可見已建立 whl 檔, 用 pip 安裝即可 : 

(myenv310) pi@raspberrypi:~/下載/pandas-ta-0.3.14b/dist $ pip install pandas_ta-0.3.14b0-py3-none-any.whl
Processing ./pandas_ta-0.3.14b0-py3-none-any.whl
Requirement already satisfied: pandas in /home/pi/myenv310/lib/python3.10/site-packages (from pandas-ta==0.3.14b0) (2.3.3)
Requirement already satisfied: numpy>=1.22.4 in /home/pi/myenv310/lib/python3.10/site-packages (from pandas->pandas-ta==0.3.14b0) (1.26.4)
Requirement already satisfied: python-dateutil>=2.8.2 in /home/pi/myenv310/lib/python3.10/site-packages (from pandas->pandas-ta==0.3.14b0) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /home/pi/myenv310/lib/python3.10/site-packages (from pandas->pandas-ta==0.3.14b0) (2025.2)
Requirement already satisfied: tzdata>=2022.7 in /home/pi/myenv310/lib/python3.10/site-packages (from pandas->pandas-ta==0.3.14b0) (2025.2)
Requirement already satisfied: six>=1.5 in /home/pi/myenv310/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas->pandas-ta==0.3.14b0) (1.17.0)
Installing collected packages: pandas-ta
Successfully installed pandas-ta-0.3.14b0

進入 Python 互動環境 : 

(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 pandas_ta as ta  
>>> ta.version   
'0.3.14b0'

可見 pandas-ta 已可正常運行

檢視儲存空間 : 

(myenv310) pi@raspberrypi:~ $ df -h  
檔案系統        容量  已用  可用 已用% 掛載點
udev            1.6G     0  1.6G    0% /dev
tmpfs           760M  9.5M  750M    2% /run
/dev/mmcblk0p2   59G   14G   42G   25% /
tmpfs           1.9G  488K  1.9G    1% /dev/shm
tmpfs           5.0M   12K  5.0M    1% /run/lock
tmpfs           1.0M     0  1.0M    0% /run/credentials/systemd-journald.service
tmpfs           1.9G   16M  1.9G    1% /tmp
/dev/mmcblk0p1  510M  103M  408M   21% /boot/firmware
tmpfs           380M   88K  380M    1% /run/user/1000
tmpfs           1.0M     0  1.0M    0% /run/credentials/getty@tty1.service

可見安裝 Python 套件用掉約 2GB 空間. 

如果使用 Thonny 開發測試, 因它預設的解譯器是系統的 Python 3.13, 而我們上面安裝的套件都在 Python 3.10 的虛擬環境 myenv310 下, 直接匯入這些套件都會 not found, 必須將解譯器更改為 myenv310 下的 python3.10 才行, 按 "工具" 選單點選 "選項" :





切到 "直譯器" 頁籤, 按 Python 可執行檔右邊的三個小點按鈕, 點選 /hom/pi/myenv310/bin 下面的 python3.10 按確認即可 :



這樣 Thonny 就會用 Python 3.10 虛擬環境去執行 Python 程式了. 至於之前建立的 Python 3.13 虛擬環境 myenv 與裡面所安裝的套件就留著, 等未來那些套件支援 Python 3.13 時再下載更新. 


2025-11-21 補充 :

安裝完所有套件後測試, 發現問題還是一樣, 出現 "無效指令" 後跳出 Python :

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 pandas_ta as ta   
無效指令
(myenv310) pi@raspberrypi:~ $

沒有留言 :