在前一篇測試中已順利將 kbar 發佈到 TestPyPI 網站, 並且在 Colab 上從 TestPyPI 取得套件來源安裝了 kbar, 成功地繪製出可顯示中文的 K 線圖, 在正式發佈到 PyPI 之前還須確認 kbar 套件是否也能在其他 Linux 機器上順利安裝中文字型並繪製可顯示中文之 K 線圖, 但由於篇幅太長, 所以將 Linux 上的測試移至本篇, 對象是 Mapleboard 上的 Ubuntu Mate 作業系統.
本系列之前的文章參考 :
15. 在 Ubuntu Mate 上從 TestPyPI 安裝 kbar :
由於不想改變 Mapleboard 上的系統 Python 執行環境, 所以本測試改在虛擬環境中進行, 在虛擬環境中用 pip3 安裝的套件只在虛擬環境中有效, 不會影響到系統之 Python 環境.
首先用下列 Python 內建指令 venv 建立一個名為 venv 的虛擬環境 :
python3 -m venv <虛擬環境名稱>
tony1966@LX2438:~/python/$ python3 -m venv venv
這會建立一個結構如下的 venv 資料夾 :
venv/
├── bin/ # Linux/MacOS 的啟動腳本和 python/pip 執行檔
│ ├── activate
│ ├── python
│ └── pip
├── lib/ # 套件會安裝在這裡 (site-packages)
├── include/
└── pyvenv.cfg # 記錄 Python 版本等資訊
執行下列指令啟動虛擬環境 :
tony1966@LX2438:~/python$ source venv/bin/activate
這時前面會出現 (venv) 表示已進入虛擬環境 :
(venv) tony1966@LX2438:~/python$
然後用 pip3 install 從 TestPyPI 安裝 kbar 套件 (參數 --extra-index-url 用來指示, 當所需的相依套件在 TestPyPI 找不到時就去 PyPI 網站找) :
(venv) tony1966@LX2438:~/python$ pip3 install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple kbar==0.1.2
Looking in indexes: https://test.pypi.org/simple/, https://pypi.org/simple
Collecting kbar==0.1.2
Using cached https://test-files.pythonhosted.org/packages/c4/c2/9b58de24d8da183612af2758c330fd3c49cd3deb0447dbf8a5e92166c45b/kbar-0.1.2-py3-none-any.whl (7.8 kB)
Collecting mplfinance>=0.12.10b0
Using cached mplfinance-0.12.10b0-py3-none-any.whl (75 kB)
Collecting matplotlib<4.0,>=3.7
Using cached matplotlib-3.10.5-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (9.5 MB)
Collecting pyarrow>=14.0.2
Downloading pyarrow-21.0.0-cp310-cp310-manylinux_2_28_aarch64.whl (41.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.1/41.1 MB 4.2 MB/s eta 0:00:00
Collecting numpy<2,>=1.23
Downloading numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (14.2 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.2/14.2 MB 4.2 MB/s eta 0:00:00
Collecting pandas<3.0,>=2.0
Downloading pandas-2.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (11.7 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.7/11.7 MB 5.5 MB/s eta 0:00:00
Collecting pillow>=8
Downloading pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (6.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.0/6.0 MB 6.2 MB/s eta 0:00:00
Collecting contourpy>=1.0.1
Using cached contourpy-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (312 kB)
Collecting fonttools>=4.22.0
Using cached fonttools-4.59.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (4.8 MB)
Collecting cycler>=0.10
Using cached cycler-0.12.1-py3-none-any.whl (8.3 kB)
Collecting pyparsing>=2.3.1
Downloading pyparsing-3.2.3-py3-none-any.whl (111 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 111.1/111.1 KB 5.3 MB/s eta 0:00:00
Collecting packaging>=20.0
Using cached packaging-25.0-py3-none-any.whl (66 kB)
Collecting kiwisolver>=1.3.1
Using cached kiwisolver-1.4.9-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (1.2 MB)
Collecting python-dateutil>=2.7
Downloading https://test-files.pythonhosted.org/packages/e0/0b/d5d878af576ff1fe68ca7ab6d70b471f2cf5cc76a84b0ab330fe2f93c63d/python_dateutil-3.9.0-py2.py3-none-any.whl (230 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 230.8/230.8 KB 1.1 MB/s eta 0:00:00
Collecting pytz>=2020.1
Using cached pytz-2025.2-py2.py3-none-any.whl (509 kB)
Collecting tzdata>=2022.7
Using cached tzdata-2025.2-py2.py3-none-any.whl (347 kB)
Collecting six>=1.5
Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: pytz, tzdata, six, pyparsing, pyarrow, pillow, packaging, numpy, kiwisolver, fonttools, cycler, python-dateutil, contourpy, pandas, matplotlib, mplfinance, kbar
Successfully installed contourpy-1.3.2 cycler-0.12.1 fonttools-4.59.1 kbar-0.1.2 kiwisolver-1.4.9 matplotlib-3.10.5 mplfinance-0.12.10b0 numpy-1.26.4 packaging-25.0 pandas-2.3.2 pillow-11.3.0 pyarrow-21.0.0 pyparsing-3.2.3 python-dateutil-3.9.0 pytz-2025.2 six-1.17.0 tzdata-2025.2
接著安裝 yfinance 套件用來下載股票資料 :
(venv) tony1966@LX2438:~/python/venv$ pip3 install yfinance
Collecting yfinance
Using cached yfinance-0.2.65-py2.py3-none-any.whl (119 kB)
Requirement already satisfied: pytz>=2022.5 in ./venv/lib/python3.10/site-packages (from yfinance) (2025.2)
Collecting peewee>=3.16.2
Using cached peewee-3.18.2-py3-none-any.whl
Collecting platformdirs>=2.0.0
Using cached platformdirs-4.3.8-py3-none-any.whl (18 kB)
Collecting websockets>=13.0
Using cached websockets-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (182 kB)
Collecting requests>=2.31
Downloading requests-2.32.5-py3-none-any.whl (64 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 64.7/64.7 KB 464.9 kB/s eta 0:00:00
Requirement already satisfied: numpy>=1.16.5 in ./venv/lib/python3.10/site-packages (from yfinance) (1.26.4)
Collecting curl_cffi>=0.7
Using cached curl_cffi-0.13.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.9 MB)
Collecting multitasking>=0.0.7
Using cached multitasking-0.0.12-py3-none-any.whl
Requirement already satisfied: pandas>=1.3.0 in ./venv/lib/python3.10/site-packages (from yfinance) (2.3.2)
Collecting frozendict>=2.3.4
Using cached frozendict-2.4.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (117 kB)
Collecting protobuf>=3.19.0
Downloading protobuf-6.32.0-cp39-abi3-manylinux2014_aarch64.whl (322 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 322.9/322.9 KB 1.9 MB/s eta 0:00:00
Collecting beautifulsoup4>=4.11.1
Using cached beautifulsoup4-4.13.4-py3-none-any.whl (187 kB)
Collecting typing-extensions>=4.0.0
Downloading typing_extensions-4.14.1-py3-none-any.whl (43 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 43.9/43.9 KB 2.4 MB/s eta 0:00:00
Collecting soupsieve>1.2
Downloading soupsieve-2.7-py3-none-any.whl (36 kB)
Collecting cffi>=1.12.0
Using cached cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (448 kB)
Collecting certifi>=2024.2.2
Downloading certifi-2025.8.3-py3-none-any.whl (161 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 161.2/161.2 KB 5.7 MB/s eta 0:00:00
Requirement already satisfied: tzdata>=2022.7 in ./venv/lib/python3.10/site-packages (from pandas>=1.3.0->yfinance) (2025.2)
Requirement already satisfied: python-dateutil>=2.8.2 in ./venv/lib/python3.10/site-packages (from pandas>=1.3.0->yfinance) (3.9.0)
Collecting idna<4,>=2.5
Downloading idna-3.10-py3-none-any.whl (70 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 70.4/70.4 KB 3.5 MB/s eta 0:00:00
Collecting charset_normalizer<4,>=2
Downloading charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (147 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 147.2/147.2 KB 5.4 MB/s eta 0:00:00
Collecting urllib3<3,>=1.21.1
Using cached urllib3-2.5.0-py3-none-any.whl (129 kB)
Collecting pycparser
Using cached pycparser-2.22-py3-none-any.whl (117 kB)
Requirement already satisfied: six>=1.5 in ./venv/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas>=1.3.0->yfinance) (1.17.0)
Installing collected packages: peewee, multitasking, websockets, urllib3, typing-extensions, soupsieve, pycparser, protobuf, platformdirs, idna, frozendict, charset_normalizer, certifi, requests, cffi, beautifulsoup4, curl_cffi, yfinance
Successfully installed beautifulsoup4-4.13.4 certifi-2025.8.3 cffi-1.17.1 charset_normalizer-3.4.3 curl_cffi-0.13.0 frozendict-2.4.6 idna-3.10 multitasking-0.0.12 peewee-3.18.2 platformdirs-4.3.8 protobuf-6.32.0 pycparser-2.22 requests-2.32.5 soupsieve-2.7 typing-extensions-4.14.1 urllib3-2.5.0 websockets-15.0.1 yfinance-0.2.65
最後進入 Python 互動模式來執行 K 線圖繪製, 程式碼如下 :
from kbar import KBar
import yfinance as yf
df=yf.download('0050.TW', start='2024-07-01', end='2024-08-21', auto_adjust=False)
df.columns=df.columns.map(lambda x: x[0]) # 改成舊版單層索引
kb=KBar(df)
kb.plot(title='台灣五十(0050.TW)', volume=True)
執行結果如下 :
(venv) tony1966@LX2438:~/python$ python
Python 3.10.12 (main, May 27 2025, 17:12:29) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from kbar import KBar
>>> import yfinance as yf
>>> df=yf.download('0050.TW', start='2024-07-01', end='2024-08-21', auto_adjust=False)
[*********************100%***********************] 1 of 1 completed
>>> df.columns=df.columns.map(lambda x: x[0]) # 改成舊版單層索引
>>> kb=KBar(df)
設定字型為: Noto Sans CJK JP
>>> kb.plot(title='台灣五十(0050.TW)', volume=True)
使用指定字型: Noto Sans CJK JP
字型候選清單: ['Noto Sans CJK JP', 'DejaVu Sans', 'Liberation Sans']
可見對於 Linux 系統而言會使用 Noto Sans CJK JP 字型來顯示中文 :
這樣便確認在 Colab 與 Ubuntu 上 kbar 都能順利顯示中文了.
測試完畢用 deactivate 離開虛擬環境 :
(venv) tony1966@LX2438:~/python$ deactivate
tony1966@LX2438:~/python$
然後用 rm 指令移除整個虛擬環境目錄即可 :
tony1966@LX2438:~/python$ rm -rf venv

沒有留言 :
張貼留言