2025年11月17日 星期一

樹莓派 Pi 400 安裝 pandas-ta 套件 (失敗)

這個周末測試了技術分析套件 pandas-ta 後, 覺得用起來比 Ta-Lib 與 ta 還順手, 於是就想說那就在 Pi 400 主機來安裝 pandas-ta 好了, 由於 Pi 400 的 Python 是 v3.11, 所以無法用 pip install 從 PyPi 下載安裝最新版 pandas-ta (要求 Python >= 3.12), 那就像 LG Gram 筆電那樣, 去下載舊版 v0.3.14b 來 build 出 whl 發佈檔安裝吧! 

原以為會很順利, 哪知安裝完成後無法成功匯入套件, 以下此過程的紀錄 :

從 Source Forge 下載 Python 原始碼 zip 檔 : 


由於下載之原始 zip 檔名稱有空格, 會影響解壓縮, 所以我將其更名為 pandas-ta-v0.3.14b.zip 後再用 unzip 解壓縮 :

(myenv) pi@raspberrypi:~ $ unzip pandas-ta-v0.3.14b.zip   
Archive:  pandas-ta-v0.3.14b.zip
bc3b292bf1cc1d5f2aba50bb750a75209d655b37
   creating: twopirllc-pandas-ta-bc3b292/
   creating: twopirllc-pandas-ta-bc3b292/.github/
   creating: twopirllc-pandas-ta-bc3b292/.github/ISSUE_TEMPLATE/
   ... (略) ...
  inflating: twopirllc-pandas-ta-bc3b292/tests/test_indicator_volume.py  
  inflating: twopirllc-pandas-ta-bc3b292/tests/test_strategy.py  
  inflating: twopirllc-pandas-ta-bc3b292/tests/test_utils.py  
  inflating: twopirllc-pandas-ta-bc3b292/tests/test_utils_metrics.py  

解壓縮後的資料夾為 twopirllc-pandas-ta-bc3b292 : 

(myenv) pi@raspberrypi:~ $ ls -ls   
總用量 3164
   4 drwxr-xr-x 2 pi pi    4096 10月  1 08:10 Bookshelf
   4 -rw-r--r-- 1 pi pi    1183 11月 12 16:08 check_sd_card.py
   4 drwxr-xr-x 2 pi pi    4096 10月  1 08:23 Desktop
   4 drwxr-xr-x 2 pi pi    4096 10月  1 08:23 Documents
   4 drwxr-xr-x 2 pi pi    4096 11月 16 23:34 Downloads
   4 drwxr-xr-x 2 pi pi    4096 10月  1 08:23 Music
   4 drwxr-xr-x 7 pi pi    4096 11月  9 08:08 myenv
3116 -rw-r--r-- 1 pi pi 3189427 11月 16 23:33 pandas-ta-v0.3.14b.zip
   4 drwxr-xr-x 2 pi pi    4096 10月  1 08:23 Pictures
   4 drwxr-xr-x 2 pi pi    4096 10月  1 08:23 Public
   0 -rw-r--r-- 1 pi pi       0 11月 12 18:52 See
   4 drwxr-xr-x 2 pi pi    4096 10月  1 08:23 Templates
   4 drwxr-xr-x 9 pi pi    4096  7月 29  2021 twopirllc-pandas-ta-bc3b292
   4 drwxr-xr-x 3 pi pi    4096 11月  6 22:31 Videos

切換到解壓後的資料夾, 用 python -m build 指令將套件內容打包成 .whl 或 .tar.gz 等可讓 pip 安裝的發佈檔案 : 

(myenv) pi@raspberrypi:~ $ cd twopirllc-pandas-ta-bc3b292   
(myenv) pi@raspberrypi:~/twopirllc-pandas-ta-bc3b292 $ python -m build   
* Creating isolated environment: venv+pip...
* Installing packages in isolated environment:
  - setuptools >= 40.8.0
* Getting build dependencies for sdist...
/tmp/build-env-g80dioa6/lib/python3.11/site-packages/setuptools/dist.py:332: InformationOnly: Normalizing '0.3.14b' to '0.3.14b0'
  self.metadata.version = self._normalize_version(self.metadata.version)
/tmp/build-env-g80dioa6/lib/python3.11/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: MIT License

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  self._finalize_license_expression()
* Building sdist...
/tmp/build-env-g80dioa6/lib/python3.11/site-packages/setuptools/dist.py:332: InformationOnly: Normalizing '0.3.14b' to '0.3.14b0'
  self.metadata.version = self._normalize_version(self.metadata.version)
/tmp/build-env-g80dioa6/lib/python3.11/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: MIT License

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  self._finalize_license_expression()
* Building wheel from sdist
* Creating isolated environment: venv+pip...
* Installing packages in isolated environment:
  - setuptools >= 40.8.0
* Getting build dependencies for wheel...
/tmp/build-env-u4dkt3be/lib/python3.11/site-packages/setuptools/dist.py:332: InformationOnly: Normalizing '0.3.14b' to '0.3.14b0'
  self.metadata.version = self._normalize_version(self.metadata.version)
/tmp/build-env-u4dkt3be/lib/python3.11/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: MIT License

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  self._finalize_license_expression()
* Building wheel...
/tmp/build-env-u4dkt3be/lib/python3.11/site-packages/setuptools/dist.py:332: InformationOnly: Normalizing '0.3.14b' to '0.3.14b0'
  self.metadata.version = self._normalize_version(self.metadata.version)
/tmp/build-env-u4dkt3be/lib/python3.11/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
!!

        ********************************************************************************
        Please consider removing the following classifiers in favor of a SPDX license expression:

        License :: OSI Approved :: MIT License

        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
        ********************************************************************************

!!
  self._finalize_license_expression()
Successfully built pandas_ta-0.3.14b0.tar.gz and pandas_ta-0.3.14b0-py3-none-any.whl

這樣便得到一個放在 dist 子資料夾下的 whl 發佈檔 : 

(myenv) pi@raspberrypi:~/twopirllc-pandas-ta-bc3b292 $ ls -ls  
總用量 104
 4 -rw-r--r--  1 pi pi  3355  7月 29  2021 CODE_OF_CONDUCT.md
 4 -rw-r--r--  1 pi pi    25  7月 29  2021 _config.yml
 4 drwxr-xr-x  2 pi pi  4096  7月 29  2021 data
 4 drwxr-xr-x  2 pi pi  4096 11月 16 23:48 dist
 4 drwxr-xr-x  2 pi pi  4096  7月 29  2021 docs
 4 drwxr-xr-x  2 pi pi  4096  7月 29  2021 examples
 4 drwxr-xr-x  2 pi pi  4096  7月 29  2021 images
 0 -rw-r--r--  1 pi pi     0  7月 29  2021 __init__.py
 4 -rw-r--r--  1 pi pi  1077  7月 29  2021 LICENSE
 4 -rw-r--r--  1 pi pi   573  7月 29  2021 Makefile
 4 drwxr-xr-x 12 pi pi  4096  7月 29  2021 pandas_ta
 4 drwxr-xr-x  2 pi pi  4096 11月 16 23:48 pandas_ta.egg-info
48 -rw-r--r--  1 pi pi 47953  7月 29  2021 README.md
 4 -rw-r--r--  1 pi pi    76  7月 29  2021 requirements.txt
 4 -rw-r--r--  1 pi pi  2457  7月 29  2021 setup.py
 4 drwxr-xr-x  2 pi pi  4096  7月 29  2021 tests

切換到 dist 下, 會發現 build 作業建立了兩個發佈檔 : 

(myenv) pi@raspberrypi:~/twopirllc-pandas-ta-bc3b292 $ cd dist   
(myenv) pi@raspberrypi:~/twopirllc-pandas-ta-bc3b292/dist $ ls -ls   
總用量 360
216 -rw-r--r-- 1 pi pi 219862 11月 16 23:48 pandas_ta-0.3.14b0-py3-none-any.whl   
144 -rw-r--r-- 1 pi pi 144808 11月 16 23:48 pandas_ta-0.3.14b0.tar.gz

用 pip install 安裝 whl 發佈檔 : 

(myenv) pi@raspberrypi:~/twopirllc-pandas-ta-bc3b292/dist $ pip install pandas_ta-0.3.14b0-py3-none-any.whl
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./pandas_ta-0.3.14b0-py3-none-any.whl
Requirement already satisfied: pandas in /home/pi/myenv/lib/python3.11/site-packages (from pandas-ta==0.3.14b0) (2.3.3)
Requirement already satisfied: numpy>=1.23.2 in /home/pi/myenv/lib/python3.11/site-packages (from pandas->pandas-ta==0.3.14b0) (1.26.4)
Requirement already satisfied: python-dateutil>=2.8.2 in /home/pi/myenv/lib/python3.11/site-packages (from pandas->pandas-ta==0.3.14b0) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /home/pi/myenv/lib/python3.11/site-packages (from pandas->pandas-ta==0.3.14b0) (2025.2)
Requirement already satisfied: tzdata>=2022.7 in /home/pi/myenv/lib/python3.11/site-packages (from pandas->pandas-ta==0.3.14b0) (2025.2)
Requirement already satisfied: six>=1.5 in /home/pi/myenv/lib/python3.11/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

安裝成功, 但是匯入 pandas_ta 卻失敗, 出現 "無效指令" 並跳出互動環境 :

(myenv) pi@raspberrypi:~/twopirllc-pandas-ta-bc3b292/dist $ cd ~  
(myenv) pi@raspberrypi:~ $ python  
Python 3.11.2 (main, Apr 28 2025, 14:11:48) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas_ta as ta   
無效指令  

但是 pip show pandas-ta 卻顯示安裝成功, 奇怪 : 

(myenv) pi@raspberrypi:~ $ (myenv) pi@raspberrypi:~ $ pip show pandas-ta   
Name: pandas_ta
Version: 0.3.14b0
Summary: An easy to use Python 3 Pandas Extension with 130+ Technical Analysis Indicators. Can be called from a Pandas DataFrame or standalone like TA-Lib. Correlation tested with TA-Lib.
Home-page: https://github.com/twopirllc/pandas-ta
Author: Kevin Johnson
Author-email: appliedmathkj@gmail.com
License: The MIT License (MIT)
Location: /home/pi/myenv/lib/python3.11/site-packages
Requires: pandas
Required-by: 

我猜有可能是因為 pandas-ta v0.3.14b 版是支援 Python 3.10 版的最後一個版本, 不保證在 Python 3.11 能順利執行. 我也懶得去尋找解決方案了, 直接丟棄 Raspberry Pi OS Bookworm, 改燒錄 Trixie 比較快 (內建 Python 3.13), 當初出於成熟穩定考量而選擇 Bookworm 實在是欠缺考慮, 只好打掉重練. 


2025-11-20 補充 :

這兩天燒了一張 Trixie 的 TF 卡給 Pi 400, 它的 Python 是 3.13 版, 雖然可以安裝最新的 pandas-ta 0.4.71b (要求  >= Python 3.12), 但匯入卻失敗 (與 Seaborn, yfinance 一樣都是 exit code -4), 可能 pandas-ta 0.4.71b 只能在 Python 3.12 運行而已. 考量 LG Gram 筆電的 Python 3.10 都可運行 (pandas-ta 用舊版 0.3.14b), 所以就在 Trixie 下載 Python 3.10 編譯安裝, 證實與 LG Gram 一樣我要用到的 Python 套件都可正常使用, 可見 Python 不是最新就好, 很多套件不一定跟得上. 

2025-11-24 補充 :

此問題後來查清楚了, 與 Python 版本或 OS 版本無關, 而是因為安裝了 Streamlit 才使得 Python 環境崩潰, 因該套件依賴的部分 C extension 不相容之故, 參考 : 


沒有留言 :