windows11 に WSL をインストールして jupyter lab を動かすまで

1. WSL2のインストール

最終的には、WSL2にtumbleweedを入れて、その上でjupyterlabを動かすことをするわけだが、まずはWSL2のインストールから。

wslコマンドは叩けるようになっていたので、まずはコマンドプロンプトか何かを開いて、以下のコマンド。ここでwslコマンドが入っていなかった場合は、たとえばwindowsストアで適当なLinuxディストリビューションを入れてみるとかすれば使えるようになるのではないかと思う。前は、システム設定か何かでGUIで設定したと思うけど、今はどうやってやったか忘れてしまった。

wsl --install openSUSE-Tumbleweed

ディストリビューションのダウンロード後にインストールが始まり、いくつかぽちぽち選ぶとインストール完了。tumbleweedにログインした状態になる。

とりあえずインストールが終わったら、

$ sudo zypper dup

でディストリビューションをアップデートしておく。

2. pythonのインストールと環境構築

まずはpythonのインストール。基本は pip で必要なパッケージは入れていく。

# zypper install python313

これでpythonはインストール完了。pythonのバージョンは適宜必要なものを入れておく。Tumbleweedは、割と早く最新バージョンが反映され、ディストリビューションのサポート切れも心配しなくていいので、心が楽。その分環境を固定すること必要があるときは使いにくいけれども。

次は一般ユーザーに戻って、venvでjupyter用の環境を作っておく。

$ python3.13 -m venv venv-313
$ ln -s venv-313/ venv

venvで独立した環境ができたので、必要なパッケージをインストール。とりあえずはjupyterとpandasとmaplotlib。

$ . venv-313/bin/activate
$ pip install --upgrade pip
$ pip install jupyter jupyter-lab pandas matplotlib

ウインドウズへのログオン時に、自動でjupyterが立ち上がるようにしたいので、起動用のスクリプトを作成しておく。エディタもvimしか使えないので、必要であればこのタイミングで好きなエディタを入れておいてもいい。nanoとかvscodeとか。

~/bin/launchjupyter.sh # パーミッション設定を忘れずに!
#!/bin/bash
LANG=C
PATH=/usr/bin:/bin
PATH=~/venv/bin:$PATH jupyter lab --no-browser --ip 0.0.0.0 >> ~/log/jupyter-lab.log 2>&1 # ログファイルの場所は適宜変更。

試しに実行してみると見事に実行可能。これでとりあえずはWSLの中でjupyterは実行できた。

3. windows起動時に自動で実行。

上記で立ち上げたjupyterはlocalhost:8888でアクセスできる。いちいち上げるのが面倒くさいので、ログオン時に自動で起動するようにしておく。linux的にはcronを使いたいが、WSLだといろいろと厄介なので、タスクスケジューラを使って設定する。

タスクスケジューラ>タスクの作成

[全般タブ]名前はわかりやすく適当につける。ユーザーがログオンしているかどうかにかかわらず実行するを選択して、パスワードを保存しない、をチェック。

[トリガータブ]タスクの開始:ログオン時を選択。特定のユーザーで、通常使うユーザーを選ぶ。

[操作タブ]プログラムの開始: wsl –cd ~ ~/bin/launchjupyter.sh

[条件タブ][設定タブ]省電力を考慮するのであれば適宜設定。

以上で、jupyterがローカルで立ち上がっているはず。あとは初回起動時のトークンとかをうまく設定すれば出来上がり。思ったより簡単にできてよかった。

こうしてインストールしたjupyterに、vscodeからアクセスするときは、左下の青いマークをクリックして、WSL:openSUSE-Tumbleweedに接続すればつなげる。この時、vscodeで開いたディレクトリが、カレントディレクトリにならないので、以下の内容をvscodeの設定のsettings.jsonに書いておくと幸せになれる。開いているipynbファイルのディレクトリがカレントディレクトリになる。

    "jupyter.runStartupCommands": [
        "import os",
        "__t=os.path.dirname(__vsc_ipynb_file__)",
        "%cd {__t}",
        "del __t"
    ],

本当はこれのためにちっさなサーバを一台買っていたのだけども、windows上で簡単にできてしまったので、実はいらなかったのは内緒。まぁそれは別のサーバのリプレイスに使うからいいのです。。。

コメントを残す