0
0

More than 1 year has passed since last update.

Jupyter labで複数のPythonバージョンをうまく切り替えることができない件

Last updated at Posted at 2021-12-12

はじめに

Pythonのバージョン別に仮想環境を作って、jupyterのカーネルに登録したにもかかわらず、Pythonのバージョンが切り替わらない件について、いろいろやったときの備忘録を残しておく。

基本のおさらい

python 3.7とpython 3.8とpython 3.9の仮想環境を作る

conda create -n py37 python=3.7 jupyterlab 
conda create -n py38 python=3.8 jupyterlab
conda create -n py39 python=3.9 jupyterlab

それぞれの仮想環境(py37とpy38とpy39)をjupyterカーネル(py37とpy38とpy39という名前)で登録する

ipython kernel install --user --name=py37 --display-name=py37
ipython kernel install --user --name=py38 --display-name=py38
ipython kernel install --user --name=py39 --display-name=py39

つまづいたポイント

ipython kernel installを唱えると、唱えた仮想環境のベースのpython環境(バージョン)がjupyterカーネルのpython環境として登録される模様。このとき、仮想環境のライブラリはそのまま参照されるため、pythonとライブラリのバージョンの不一致が起きる(知らないとハマる)。したがって、仮想環境をjupyterカーネルで登録するときに、登録したい仮想環境をアクティベートした上でipython kernel installを唱えるのがよい。

# よい例
(base) C:\\hogehoge>conda activate py37
(py37) C:\\hogehoge>ipython kernel install --user --name=py37 --display-name=py37
(py37) C:\\hogehoge>conda activate py38
(py38) C:\\hogehoge>ipython kernel install --user --name=py38 --display-name=py38
(py38) C:\\hogehoge>conda activate py39
(py39) C:\\hogehoge>ipython kernel install --user --name=py39 --display-name=py39

# 悪い例 (base)のpythonバージョンが引き継がれる
(base) C:\\hogehoge>ipython kernel install --user --name=py37 --display-name=py37
(base) C:\\hogehoge>ipython kernel install --user --name=py38 --display-name=py38
(base) C:\\hogehoge>ipython kernel install --user --name=py39 --display-name=py39

省略すなということですな。

おまけ

python環境とライブラリの環境がアンマッチしていないかはjupyterで以下のスクリプトを実行すると確認できる。

hogehoge.ipynb
import sys
print(sys.path) # ライブラリのパス 
print(sys.executable) # pythonのパス(バージョンの確認であればsys.versionでも可)

また、カーネルの設定はkernel.jsonに保存されており、argv属性の一番目に使用するpythonのパスが記載されている。強制的に書き換えることも可能。(非推奨) なお、AppDataは隠しフォルダとなっている。
C:\hogehoge\AppData\Roaming\jupyter\kernels\py38\kernel.json

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0