めもちょー

メモ帳代わりに使っています。

Jupyter Notebookでvenv環境を使う

前提

久しぶりに機械学習のコードを書く機会が会ったので、Jupyter Notebookを起動しました。
下記のようにvenv環境でJupyter Notebookを立ち上げました。

# .venv をactivate
$ cd workspace
$ python -m venv .venv
$ source .venv/bin/activate

# jupyter install
(.venv) pip install jupyter

# add ipython kernel as myenv
(.venv) ipython kernel install --user --name=myenv

# start jupyter notebook
(.venv) jupyter notebook

Jupyter NotebookのUIからカーネルmyenvを選択すると良いそうです。

カーネルが切り換わらない場合

基本的には上記の設定のみで完結するようですが、自分の環境だとカーネルを切り替えても、.venvにインストールしたモジュールを使用することができませんでした。
Jupyter Notebookのセル上で下記のコードを実行してみると、.venvではなくデフォルトのPythonが使われているようでした。

import sys
sys.executable

# '/usr/bin/python3'

そこで、先程ipython kernel install --user --name=myenvで追加したカーネルの設定を見てみることにしました。

(.venv) jupyter kernelspec list
Available kernels:
  myenv          /home/gesogeso/.local/share/jupyter/kernels/myenv

そのディレクトリの中でkernelを表現しているファイルはkernel.jsonということが推測されました。

 cat  /home/gesogeso/.local/share/jupyter/kernels/myenv/kernel.json
{
 "argv": [
  "/usr/bin/python3",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "myenv",
 "language": "python",
 "metadata": {
  "debugger": true
 }
}

argvはJupyter NotebookでインタプリタとなるPythonをしているようでしたので、.venvのPythonに変更しました。

 cat  /home/gesogeso/.local/share/jupyter/kernels/myenv/kernel.json
{
 "argv": [
  "/home/gesogeso/ghq/github.com/gesoges0/nba-jupyters/.venv/bin/python3",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "myenv",
 "language": "python",
 "metadata": {
  "debugger": true
 }
}

再びJupyter Notebookを再起動してカーネルを選択し直したら、無事.venvのモジュールのimportに成功することができました。