這個周末測試了技術分析套件 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 不相容之故, 參考 :
沒有留言 :
張貼留言