Jupyterlab 使用
背景知識
-
JupyterLab 的運作機制:
- JupyterLab 是一個前端界面,負責顯示和編輯 Notebook,但實際執行程式碼的是後端的 kernel。
- Kernel 是獨立的執行環境,負責運行 Python(或其他語言)程式碼。JupyterLab 透過
jupyter_server與 kernel 通信。
-
Kernel 的來源:
- 默认情况下,安装 JupyterLab 時會附帶一個預設的 Python kernel(通常是安裝 JupyterLab 的環境)。
- 你可以添加其他 kernel,例如來自不同 Conda 環境、虛擬環境,甚至其他 Python 安裝。
-
乾淨環境假設:
- 你提到「乾淨 Python 3.12.9 環境」,假設只有 Python 3.12.9 和 JupyterLab,沒有其他套件(如
numpy、pandas)。
- 你提到「乾淨 Python 3.12.9 環境」,假設只有 Python 3.12.9 和 JupyterLab,沒有其他套件(如
問題解答
Q1: 純安裝 JupyterLab 後,使用其他 kernel 時需要額外安裝套件嗎?
- 不需要在 JupyterLab 環境中額外安裝套件,但 取決於你使用的 kernel 是否已經包含所需套件。
- 詳細說明:
- JupyterLab 本身只負責界面和 kernel 管理,不執行程式碼,因此它不需要知道你的程式碼依賴哪些套件。
- 當你切換到其他 kernel(例如另一個 Conda 環境的 Python kernel),程式碼會在該 kernel 的環境中運行,使用的套件來自該 kernel 的環境,而不是 JupyterLab 的環境。
- 如果該 kernel 的環境缺少運行程式碼所需的套件(例如
numpy),你需要在該 kernel 的環境中安裝這些套件,而不是在 JupyterLab 的環境中。
Q2: JupyterLab 是使用 kernel 來跑 Python 嗎?
- 是的,JupyterLab 完全依賴 kernel 來運行 Python 程式碼。
- 流程:
- 你在 JupyterLab 的 Notebook 中輸入程式碼。
- JupyterLab 將程式碼發送到當前選定的 kernel。
- Kernel 執行程式碼並將結果返回給 JupyterLab 顯示。
- 因此,JupyterLab 本身不包含 Python 執行環境,所有執行邏輯都由 kernel 提供。
額外注意
- Python 3.12 的相容性:
- 如前所述,Python 3.12 是較新版本,某些套件(例如舊版
jupyter_server)可能有相容性問題。如果遇到錯誤(如pysqlite2),考慮降級到 Python 3.11。
- 如前所述,Python 3.12 是較新版本,某些套件(例如舊版
- Kernel 清單管理:
- 查看已註冊的 kernel:
jupyter kernelspec list - 移除不需要的 kernel:
jupyter kernelspec remove ml_env
- 查看已註冊的 kernel:
在 JupyterLab 中使用其他環境
- 你已經安裝了 JupyterLab(例如在一個名為
jupyter_env的 Conda 環境中)。 - 你有其他環境(例如
data_env、ml_env),這些環境包含你想使用的套件或特定 Python 版本。
步驟:將其他環境加入 JupyterLab
步驟 1: 在目標環境中安裝 ipykernel
- 每個你想用作 kernel 的環境都需要安裝
ipykernel,這樣它才能與 JupyterLab 通信。
-
啟動目標環境:
conda activate data_env -
安裝
ipykernel:conda install -c conda-forge ipykernel
步驟 2: 註冊環境作為 kernel
- 使用
ipykernel將該環境註冊到 Jupyter 的 kernel 清單中。
-
在目標環境中運行以下命令:
python -m ipykernel install --user --name data_env --display-name "Data Env (Python 3.11)"--user:將 kernel 安裝到使用者層級(~/.local/share/jupyter/kernels/)。--name data_env:kernel 的內部名稱(建議與環境名稱一致)。--display-name "Data Env (Python 3.11)":JupyterLab 中顯示的名稱(可自訂)。
-
重複此步驟,為每個想使用的環境註冊 kernel。例如:
conda activate ml_env conda install -c conda-forge ipykernel python -m ipykernel install --user --name ml_env --display-name "ML Env (Python 3.10)"
步驟 3: 啟動 JupyterLab
- 返回安裝 JupyterLab 的環境(例如
jupyter_env):conda activate jupyter_env jupyter lab
步驟 4: 在 JupyterLab 中選擇其他環境
-
新建 Notebook:
- 在 JupyterLab 界面中,點擊左上角的「+」按鈕,選擇「Notebook」。
-
選擇 Kernel:
- 彈出窗口會顯示可用的 kernel 清單。
- 選擇你剛註冊的 kernel,例如 "Data Env (Python 3.11)" 或 "ML Env (Python 3.10)"。
- 點擊「Select」。
-
切換現有 Notebook 的 Kernel:
- 如果已經打開一個 Notebook:
- 點擊頂部菜單的「Kernel」 > 「Change Kernel」。
- 從下拉清單中選擇目標 kernel(例如 "Data Env (Python 3.11)")。
- 確認後,Notebook 會重新連接到新 kernel。
- 如果已經打開一個 Notebook:
-
驗證:
- 在 Notebook 中運行:
import sys print(sys.executable) # 顯示當前 kernel 的 Python 路徑 import numpy # 測試套件是否可用 - 如果路徑指向
data_env(例如/home/user/miniconda3/envs/data_env/bin/python),且套件正常導入,說明成功使用該環境。
- 在 Notebook 中運行:
管理 Kernel
查看已註冊的 Kernel
jupyter kernelspec list
- 輸出示例:
Available kernels: data_env /home/user/.local/share/jupyter/kernels/data_env ml_env /home/user/.local/share/jupyter/kernels/ml_env python3 /home/user/miniconda3/envs/jupyter_env/share/jupyter/kernels/python3
移除不需要的 Kernel
- 如果不再需要某個 kernel:
jupyter kernelspec remove data_env
注意事項
-
JupyterLab 環境無需包含所有套件:
- 如前所述,JupyterLab 的環境(例如
jupyter_env)只需安裝jupyterlab,無需安裝其他 kernel 環境中的套件(例如numpy、tensorflow)。
- 如前所述,JupyterLab 的環境(例如
-
Kernel 環境必須獨立完整:
- 每個 kernel 環境(例如
data_env)需要包含運行程式碼所需的套件。如果缺少,會報錯(如ModuleNotFoundError)。
- 每個 kernel 環境(例如
-
跨系統移植:
- 如果你在 WSL 或其他系統打包環境並移植到新機器,kernel 的註冊資訊不會隨
conda-pack一起移動,需在新機器上重新運行python -m ipykernel install。
- 如果你在 WSL 或其他系統打包環境並移植到新機器,kernel 的註冊資訊不會隨
-
多版本 Python:
- 你可以用不同 Python 版本的環境作為 kernel(例如 Python 3.11、3.12),只要它們都安裝了
ipykernel。
- 你可以用不同 Python 版本的環境作為 kernel(例如 Python 3.11、3.12),只要它們都安裝了
完整範例
假設你有以下環境:
jupyter_env:Python 3.12,只安裝 JupyterLab。data_env:Python 3.11,包含numpy和pandas。
配置流程:
# 配置 JupyterLab 環境
conda create -n jupyter_env python=3.12
conda activate jupyter_env
conda install -c conda-forge jupyterlab
# 配置數據分析環境
conda create -n data_env python=3.11
conda activate data_env
conda install -c conda-forge numpy pandas ipykernel
python -m ipykernel install --user --name data_env --display-name "Data Env (Python 3.11)"
# 啟動 JupyterLab
conda activate jupyter_env
jupyter lab
在 JupyterLab 中:
- 新建 Notebook,選擇 "Data Env (Python 3.11)"。
- 運行:
import numpy as np print(np.__version__) - 成功輸出版本號,證明使用的是
data_env的 kernel。
在使用 sqlite_web 遠端存取 SQLite 資料庫時,需要了解 sqlite_web 是一個基於 Python 的工具,它提供了一個網頁介面來管理和查詢本地的 SQLite 資料庫檔案。預設情況下,sqlite_web 是設計來在本地機器上運行的,並不直接支援遠端存取。然而,透過一些配置和網路設定,你可以實現遠端進入的效果。以下是步驟和說明:
遠端連線
在遠端存取 JupyterLab 的過程中,配置方式與 sqlite_web 有相似之處,但 JupyterLab 本身提供了更多的選項和安全性功能,例如密碼保護和 SSL 加密。以下是詳細的步驟,說明如何設定 JupyterLab 以實現遠端連線:
1. 安裝 JupyterLab
假設你在遠端主機上尚未安裝 JupyterLab,可以使用以下指令安裝:
pip install jupyterlab
2. 配置 JupyterLab
JupyterLab 需要一些基本配置來允許遠端存取。以下是設定步驟:
(1) 生成配置文件
首次運行 JupyterLab 時,生成預設配置文件:
jupyter lab --generate-config
這會在 ~/.jupyter/jupyter_lab_config.py 中創建一個配置文件。
(2) 修改配置文件
編輯剛剛生成的配置文件(例如使用 nano 或 vim):
nano ~/.jupyter/jupyter_lab_config.py
找到以下幾行並修改(如果沒有這些行,可以直接新增):
c.ServerApp.ip = '0.0.0.0' # 監聽所有網路介面,允許外部連線
c.ServerApp.port = 8888 # 指定端口(預設是 8888,可自訂)
c.ServerApp.open_browser = False # 不自動打開本地瀏覽器
c.ServerApp.allow_remote_access = True # 允許遠端存取
(3) 設定密碼(可選,但強烈建議)
為了安全性,可以設定一個登入密碼。運行以下指令生成密碼:
jupyter lab password
系統會提示你輸入並確認密碼,然後將加密後的密碼儲存到配置文件中(通常在 ~/.jupyter/jupyter_server_config.json)。啟動 JupyterLab 後,訪問時會要求輸入此密碼。
3. 啟動 JupyterLab
在遠端主機上啟動 JupyterLab:
jupyter lab
如果配置文件已正確設定,JupyterLab 會監聽 0.0.0.0:8888,並允許外部連線。
你也可以直接在命令列中指定參數(如果不想修改配置文件):
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser
4. 檢查防火牆和網路設定
與 sqlite_web 類似,你需要確保遠端主機的防火牆和網路設定允許連線到 JupyterLab 的端口(例如 8888)。
使用 ufw(Ubuntu)
sudo ufw allow 8888
sudo ufw status
使用 firewalld(CentOS/RHEL)
sudo firewall-cmd --add-port=8888/tcp --permanent
sudo firewall-cmd --reload
如果使用雲端服務(例如 AWS、GCP、Azure),需要在安全群組中開放對應端口。
5. 從本地端遠端存取
在本地端的瀏覽器中輸入以下網址:
http://遠端主機的IP位址:8888
例如,如果遠端主機的公共 IP 是 192.168.1.100,則輸入:
http://192.168.1.100:8888
如果設定了密碼,頁面會提示你輸入密碼以登入。
6. 安全性建議
JupyterLab 直接暴露在公開網路上可能有安全風險。以下是幾個提升安全性的方法:
(1) 使用 SSL 加密
為了防止資料在傳輸過程中被攔截,建議啟用 HTTPS:
- 生成自簽名憑證:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem - 修改配置文件,加入憑證路徑:
c.ServerApp.certfile = '/path/to/mycert.pem' c.ServerApp.keyfile = '/path/to/mykey.key' - 啟動後,使用
https://遠端主機IP:8888存取。
(2) 使用 SSH 隧道
與 sqlite_web 類似,SSH 隧道是更安全的存取方式:
- 在本地端執行:
ssh -L 8888:localhost:8888 user@遠端主機IP - 在遠端主機上啟動 JupyterLab,監聽本地:
jupyter lab --ip=127.0.0.1 --port=8888 - 在本地瀏覽器輸入
http://localhost:8888,即可透過隧道存取。
(3) 使用 Token 驗證
JupyterLab 啟動時會生成一個隨機 Token(顯示在終端機輸出中,例如 http://.../?token=xyz)。你可以保留此機制,並在存取時手動輸入 Token,而不是設定固定密碼。
7. 注意事項
- 後台運行:如果想讓 JupyterLab 在關閉終端後繼續運行,可以使用
nohup或screen:nohup jupyter lab --ip=0.0.0.0 --port=8888 --no-browser & - 資源限制:JupyterLab 可能會消耗大量記憶體,特別是在執行大型程式時。確保遠端主機有足夠資源。
- 多用戶支援:如果你需要多人使用,考慮使用 JupyterHub,它是為多用戶環境設計的擴展版本。
總結
要遠端連線到 JupyterLab,最簡單的方式是修改配置文件並開放端口,但為了安全性,建議搭配密碼、SSL 或 SSH 隧道使用。根據你的需求(例如單人使用還是多人協作),可以選擇不同的配置方式。如果有更具體的問題(例如作業系統或網路環境),請告訴我,我可以提供更精確的建議!