章節 8 JupyterHub

8.1 更新套件

  1. 在 conda 對應的虛擬環境中編輯好 .yml 檔案,加入新增的套件。

  2. 執行更新指令

conda env update --file <虛擬環境>.yml --prune

8.2 新增供 JupyterHub 的 Python 環境

  1. 用超級使用者權限在 /opt/conda/envs/ 建立新環境的 yaml 檔案。
name: new_env
channels:
  - defaults
  - conda-forge
dependencies:
  - python=3.11
  - ipykernel
  - plotly
prefix: /opt/conda/envs/new_env

關於虛擬環境的撰寫可以參考conda官方文件

  1. 使用 conda 指令安裝
sudo conda env create --file /opt/conda/envs/new_env.yml
  1. 連結至 JupyterHub
sudo /opt/conda/envs/new_env/bin/python -m \
    ipykernel install \
    --prefix=/opt/jupyterhub/ \
    --name 'new_env' \
    --display-name "新的 Python"

後續可使用指令 jupyter kernelspec 來管理連結的 conda 環境。

8.3 matplotlib 中文顯示問題

  1. 安裝開源的 CJK 字體
sudo apt install fonts-noto-cjk -y
  1. 搜尋 matplotlib 設定檔案位置
find /opt/conda/envs -type f -name matplotlibrc

/opt/conda/envs/default-python/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc

  1. 複製一份到虛擬環境資料夾中
sudo cp /opt/conda/envs/default-python/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc /opt/conda/envs
  1. 編輯設定檔案,在設定檔案裡面的 font.family 設定為 NotoSans CJK JP
sudo vim /opt/conda/envs/matplotlibrc

/opt/conda/envs/matplotlibrc

font.family: "Noto Sans CJK JP"
#font.style:   normal
#font.variant: normal
#font.weight:  normal
#font.stretch: normal
#font.size:    10.0
  1. 刪除原本的檔案
sudo rm /opt/conda/envs/default-python/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc
  1. 把修改後的檔案軟連結回原處
sudo ln -s /opt/conda/envs/matplotlibrc /opt/conda/envs/default-python/lib/python3.10/site-packages/matplotlib/mpl-data/
  1. 測試中文
import matplotlib.pyplot as plt  
y = [0,1,2,3,4,5] 
x= [0,5,10,15,20,25] 
plt.plot(x, y, color='green')  
plt.xlabel('x')  
plt.ylabel('y')  
plt.title("中文顯示")   
plt.show()
matplotlib 中文顯示測試

圖 8.1: matplotlib 中文顯示測試