サーバーに jupyter lab をインストールし、ローカルのPCから利用する環境を整えました。その時の手順のメモです。
【前提】
・ローカルのPC環境:Windows10 とします。
jupyter lab のインストール
(その1)で作成した仮想環境 venv-3 を利用することにして、ここに jupyter lab をインストールします。
【注】パッケージ名は「jupyterlab」、コマンド名は「jupyter lab」となるので注意
# 仮想環境 venv-3 起動
[python@^ ~]$ source venv-3/bin/activate
# jupyter lab のインストール
(venv-3) [python@^ ~]$ pip install jupyterlab
Collecting jupyterlab
Downloading jupyterlab-3.1.9-py3-none-any.whl (8.5 MB)
|????????????????????????????????| 8.5 MB 2.8 MB/s
Collecting jupyter-core
Downloading jupyter_core-4.7.1-py3-none-any.whl (82 kB)
|????????????????????????????????| 82 kB 2.4 MB/s
・・・・・・・・・
・・・(略)・・・
# jupyter lab の所在
(venv-3) [python@^ ~]$ which jupyter
~/venv-3/bin/jupyter
インストールは完了です。
設定ファイルの作成・修正
次に、jupyter lab の設定ファイル(jupyter_lab_config.py)を作成します。
以下のコマンドを実行することにより、ユーザーのホームディレクトリ(/home/python)に、.jupyter ディレクトリが追加され、その中に設定ファイルが作成されます。
# 設定ファイルの作成
(venv-3) [python@^ ~]$ jupyter lab --generate-config
Writing default config to: /home/python/.jupyter/jupyter_lab_config.py
# ホームディレクトリの確認
(venv-3) [python@^ ~]$ ls -la
合計 72
drwx------ 12 python python 4096 8月 30 11:59 .
drwxr-xr-x. 4 root root 4096 8月 30 09:55 ..
・・・・・・
drwx------ 2 python python 4096 8月 30 11:59 .jupyter
・・・・・・
# 設定ファイルの確認
(venv-3) [python@^ ~]$ ls -la .jupyter
合計 44
drwx------ 2 python python 4096 8月 30 11:59 .
drwx------ 12 python python 4096 8月 30 11:59 ..
-rw-rw-r-- 1 python python 34318 8月 30 11:59 jupyter_lab_config.py
設定ファイルには、jupyter lab 起動のためのパスワードを設定する必要がありますが、ここでは、以下のコマンドで、ハッシュ化されたパスワードを作成することにします。コマンドを実行すると、.jupyter ディレクトリの json ファイル内にパスワードが作成されるので、コピーして設定ファイルに登録します。
-> パスワード(例):Password-Jlab-python とします。
# パスワードを作成
(venv-3) [python@^ ~]$ jupyter lab password
Enter password: Password-Jlab-python
Verify password: Password-Jlab-python
[JupyterPasswordApp] Wrote hashed password to /home/python/.jupyter/jupyter_server_config.json
# json ファイル内にパスワードが作成される(コピーしておく)
(venv-3) [python@^ ~]$ vi .jupyter/jupyter_server_config.json
---------------------------------------------------------------------
{
"ServerApp": {
"password": "argon2:$argon2id$v=19$m=10240,t=10,p=8$ayNbCppx+/img....."
}
}
---------------------------------------------------------------------
設定ファイルを開き、以下の項目のコメントアウトを外し、書き換えます。
->jupyter lab を起動する際に使用するport番号(例):9999 とします。
(venv-3) [python@^ ~]$ vi .jupyter/jupyter_lab_config.py
--------------------------------------------------
c.ServerApp.ip = 'localhost' # コメントアウトを外す
c.ServerApp.open_browser = False # 同
c.ServerApp.port = 9999 # c.ServerApp.port = 0
c.ServerApp.token = '' # c.ServerApp.token = '<generated>'
c.ServerApp.password = 'argon2:$argon2id$v=19$m=10240,t=10,p=8$ayNbCppx+/img.....'
--------------------------------------------------
設定が完了しました。
ここで予め、jupyter lab の作業場所(workspace)を作成しておきます。
(venv-3) [python@^ ~]$ mkdir workspace
jupyter lab の起動
ローカルPCからサーバー上の jupyter lab を 起動し、PCのブラウザから利用できるようにします。
まず、PCの「Windows PowerSheell」を起動して、サーバーにSSH接続します。その際に、以下のように、ローカルポートフォワードのオプションを設定します。
ssh -p <ssh接続 の port番号> -L <local の port番号(任意)>:localhost:<jupyter lab の port番号> <ユーザー名>@<サーバーIP または ドメイン名>)
->各項目の設定例
・ssh接続 の port番号(例):50000
・local の port番号(任意)(例):9999
・jupyter lab の port番号(例):9999
・ユーザー名(例):python
・サーバーIP または ドメイン名(例):example.net
・ユーザーパスワード(例):Password-OS-python とします。
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6
# ssh接続し、パスワードを入力
PS C:\Users\user> ssh -p 50000 -L 9999:localhost:9999 python@example.net
python@example.net's password: Password-OS-python
SAKURA internet [Virtual Private Server SERVICE]
Last login: Mon Aug 30 17:47:10 2021 from 198.51.100.1
workspace に移動して、仮想環境を有効にした後、jupyter lab を起動します。
# workspaceディレクトリへ移動
[python@^ ~]$ cd workspace
# 仮想環境 venv-3 起動
[python@^ workspace]$ source ../venv-3/bin/activate
# jupyter lab 起動
(venv-3) [python@^ workspace]$ jupyter lab
[I 2021-08-30 20:28:24.901 ServerApp] jupyterlab | extension was successfully linked.
[I 2021-08-30 20:28:24.911 ServerApp] Writing Jupyter server cookie secret to /home/python/.local/share/jupyter/runtime/jupyter_cookie_secret
[I 2021-08-30 20:28:25.070 ServerApp] nbclassic | extension was successfully linked.
[I 2021-08-30 20:28:25.089 ServerApp] nbclassic | extension was successfully loaded.
[I 2021-08-30 20:28:25.090 LabApp] JupyterLab extension loaded from /home/python/venv-3/lib64/python3.8/site-packages/jupyterlab
[I 2021-08-30 20:28:25.090 LabApp] JupyterLab application directory is /home/python/venv-3/share/jupyter/lab
[I 2021-08-30 20:28:25.093 ServerApp] jupyterlab | extension was successfully loaded.
[I 2021-08-30 20:28:25.094 ServerApp] ローカルディレクトリからノートブックをサーブ: /home/python/workspace
[I 2021-08-30 20:28:25.094 ServerApp] Jupyter Server 1.10.2 is running at:
[I 2021-08-30 20:28:25.094 ServerApp] http://localhost:9999/lab
[I 2021-08-30 20:28:25.094 ServerApp] or http://127.0.0.1:9999/lab
[I 2021-08-30 20:28:25.094 ServerApp] サーバを停止し全てのカーネルをシャットダウンするには Control-C を使って下さい(確認をスキップするには2回)。
PCのブラウザから http://localhost:9999/lab へアクセスします。

パスワード(ここでは、Password-Jlab-python)を入力してログインします。

Notebook の Python3 を選択して、pythonのバージョン、所在を確認してみます。

import sys
print(sys.version)
3.8.8 (default, Aug 2 2021, 14:57:02)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
print(sys.executable)
/home/python/venv-3/bin/python
仮想環境 venv-3 の python3.8 が起動していることが確認できました。
Kernel の追加
複数の仮想環境があるとき、仮想環境を切り替えて実行したいケースが出てくるときがあります。jyupyter lab を再度、実行したい仮想環境の下で起動し直してもよいですが、カーネルの切換で対応する手段もあります。
今の時点で、利用できるカーネルを確認してみます。
# 利用できるカーネルの確認
(venv-3) [python@^ ~]$ jupyter kernelspec list
Available kernels:
python3 /home/python/venv-3/share/jupyter/kernels/python3
jupyter lab を起動した環境のみが登録されています(’python3’ は 現在の仮想環境=venv-3 の環境です)。この環境だけを使うのであれば、これで特に問題はありません。
仮想環境 venv-2(python3.6)も切り換えて使うようにしたい、というときは、予め、venv-2 に jupyter lab をインストールして、カーネルに追加しておきます。その手順は以下の通りです。(設定ファイルの修正等は不要です。)
# 仮想環境 venv-2 の起動
(venv-3) [python@^~]$ source venv-2/bin/activate
# jupyter lab インストール
(venv-2) [python@^ ~]$ pip install jupyterlab
・・・・・(略)
# venv-2をカーネルに追加
(venv-2) [python@^ ~]$ ipython kernel install --user --name=venv2 --display-name=python36-venv2
Installed kernelspec venv2 in /home/python/.local/share/jupyter/kernels/venv2
※カーネルに追加時のオプション:–name=<内部的に使用されるカーネルの名称> –display-name=<表示されるカーネルの名称>
あらためて利用できるカーネルを確認してみます。
(venv-2) [python@^ ~]$ jupyter kernelspec list
Available kernels:
venv2 /home/python/.local/share/jupyter/kernels/venv2
python3 /home/python/venv-2/share/jupyter/kernels/python3
venv-2 の環境が、カーネルに追加されました。’python3′ は、今度は、現在の仮想環境=venv-2 の環境になってしまいましたので、venv-3 の環境も明示的にカーネルに追加しておくことにします。
# 仮想環境 venv-3 の起動
(venv-2) [python@^ ~]$ source venv-3/bin/activate
# venv-3 をカーネルに追加
(venv-3) [python@^ ~]$ ipython kernel install --user --name=venv3 --
display-name=python38-venv3
Installed kernelspec venv3 in /home/python/.local/share/jupyter/kernels/venv3
もう一度、利用できるカーネルを確認してみます。
(venv-3) [python@^ ~]$ jupyter kernelspec list
Available kernels:
venv2 /home/python/.local/share/jupyter/kernels/venv2
venv3 /home/python/.local/share/jupyter/kernels/venv3
python3 /home/python/venv-3/share/jupyter/kernels/python3
再びローカルPC から venv-3 環境で jupyter lab を起動し、ブラウザで確認してみます。
メニュー kernel タグの「Change Kernel…」項を選択すると、Kernel が追加されていることがわかります。’Python3′ は、jupyter を立ち上げた環境(ここではvenv-3=python3.8)です。

カーネルを切り換えることで、別の仮想環境が使えるようになりました。
Kernelの削除
カーネルを削除したいときは、
$ jupyter kernelspec uninstall <kernelの名前>
とします。<kernelの名前> は、作成のときに –name= で指定した名称になります。
Pythonの実行ファイル(.py)の作成と実行
.py の作成
jupyter lab で作成した Notebook を python の実行ファイル(.py)にする方法についてのメモです。
例えば、次のような Notebook が test.ipynb という名称で保存してあるとき、

これを python の実行ファイルにする方法の一つは、メニューの
File > Export Notebook As … > Executable Script
により、エクスポートすること。ただし、この方法だと .py ファイルがローカルPCにダウンロードされるため、サーバーに戻してやらなくてはいけません。
サーバー内で処理を完結するには、jupyter lab 上で次のコマンドを実行します。
!jupyter nbconvert --to python test.ipynb
[NbConvertApp] Converting notebook test.ipynb to python
[NbConvertApp] Writing 251 bytes to test.py
これを実行することで、test.ipynb と同じディレクトリに test.py が作成されます。
test.py には、次のように記述されます。
#!/usr/bin/env python
# coding: utf-8
# In[1]:
import sys
print(sys.version)
# In[2]:
print(sys.executable)
# In[3]:
import numpy as np
a = np.array([1, 2, 3])
print(a)
# In[ ]:
#! から始まる1行目は「shebang」と呼ばれ、「実行時のインタプリタを指定するもの」ですが、test.py を python コマンドを使って実行する限り(test.py をコマンドとして実行するのではない限り)、記述する必然性はありません。
.py の実行
jupyter lab 上で実行
test.py を jupyter lab 上で実行するときは、セルに次のコマンドを入力します。
%run test.py
3.8.12 (default, Sep 21 2021, 00:10:52)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
/home/python/venv-3/bin/python
[1 2 3]

numpy は仮想環境 venv-3 のみにインストールしているので、カーネルを変更して(例えば venv-2)実行すると、エラーになります。

pythonコマンドで実行
SSH接続したターミナル上で実行する場合は、仮想環境を有効にした上で実行します。
[python@^ ~]$ cd workspace
[python@^ workspace]$ source ../venv-3/bin/activate
(venv-3) [python@^ workspace]$ python test.py
3.8.12 (default, Sep 21 2021, 00:10:52)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
/home/python/venv-3/bin/python
[1 2 3]
この場合も、numpy をインストールしていない環境で実行するとエラーになります。
.py をコマンドとして実行
次に、test.py をコマンドとして実行します(python コマンドを使わない)。コマンドとして実行するには、test.py 実行権限を付与する必要があります。例えば、今のまま実行すると、
(venv-3) [python@^ workspace]$ ./test.py
bash: ./test.py: 許可がありません
※「 ./ 」を付けて実行していることに注意。付けないと「bash: test.py: コマンドが見つかりません」となる。
と指摘されるので、実行権限を付与してもう一度実行してみます。
(venv-3) [python@^ workspace]$ chmod 777 test.py
(venv-3) [python@^ workspace]$ ./test.py
3.8.12 (default, Sep 21 2021, 00:10:52)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
/home/python/venv-3/bin/python
[1 2 3]
うまくいきました。ここでも、numpy がインストールされていない環境で実行するとエラーになります。試しに、仮想環境venv-3 を終了した環境で実行してみます。
(venv-3) [python@^ workspace]$ deactivate
[python@^ workspace]$ ./test.py
3.8.12 (default, Sep 21 2021, 00:10:52)
[GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
/usr/bin/python3.8
Traceback (most recent call last):
File "./test.py", line 20, in <module>
import numpy as np
ModuleNotFoundError: No module named 'numpy'
test.py をコマンドとして実行する場合は「shebang」の記載が重要となり、この場合も以下のように実行する環境を特定しておけば、エラーとはなりません。
#!/home/python/venv-3/bin/python
参考
SSH先のサーバ上のnotebookをローカルPCで操作する
Jupyterで複数カーネルを簡単に選択するための設定
Jupyter Notebook のカーネルに仮想環境をセットする方法
手を動かして理解するshebang