ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

VSCodeのipynbファイルの「Select a Kernel」に、venvの環境が表示されないときの対処法

  • 対処法1:右クリックの「Codeを開く」を使わず、別のランチャーからVSCodeを開くと表示される
  • 対処法2:ipython kernel installカーネルを追加する
  • その他:Jupyterの拡張機能をダウングレードする(v2020.12.414227025では動くらしいが、あまりしたくない)

似たような現象の議論は以下で行われています。

https://github.com/microsoft/vscode-jupyter/issues/4011

どのような現象か

VSCode上でipynbファイルを開いたとき、以下のような画面になります。

f:id:takeg:20210522153208p:plain
VSCodeでipynbファイルを開いたときの状況

venvで仮想環境を作ったので、ipynbで実行されるPython./venv/Scripts/python.exeに変更したいです。

以下のように、VSCode画面右上の「Python 3.8.5 64-bit ('base': conda): idle」をクリックすると実行するPythonの環境を変更できますが、venv環境のpython.exeが表示されず、設定できないという現象が発生します(手動で設定したいが、方法がわからない)。

f:id:takeg:20210522153648p:plain

この現象は、起きたり起きなかったりと再現性はなく、どういうルールで「Select a Kernel」に表示されるのかもわからない(自分で設定させてほしい)うえ、PCを再起動しても直るわけでもないので、 結構途方に暮れる現象です。

対処法1:右クリックの「Codeを開く」を使わず、別のランチャーからVSCodeを開くと表示される

VSCodeをタスクバーにピン留めしておいて、そこからVSCodeを起動すると、なぜか「Select a Kernel」で選択可能になっています。

f:id:takeg:20210522163604p:plain
右クリックの「Codeを開く」をした場合の「Select a Kernel」

f:id:takeg:20210522163728p:plain
タスクバーにピン留めしたVSCodeで起動した場合の「Select a Kernel」

タスクバーにピン留めした方は、一番上に「c:\Users\takey\Desktop\myspace\workspace\my-practice\qiskit_textbook_practice\venv\Scripts...」があるのがわかります。これを選択したかった。

ただ、根本的な解決になっていない気がする。

対処法2:ipython kernel installカーネルを追加する

Jupyterで複数カーネルを簡単に選択するための設定 - Qiita

# カーネルに追加
(venv)$  ipython kernel install --user --name=venv --display-name=venv

これを実行してVSCodeを再起動すると、「Select a Kernel」に「venv」という名前のカーネルが選択可能になります。ただし、--nameで指定した名前が被ると上書きしてしまうので、それに注意して追加しなければなりません。

私は仮想環境名をすべてvenvに統一しているのですが、この方法はいちいち名前を考えなきゃいけないというデメリットがある一方、Jupyterの暗黙的なルールで「Select a Kernel」に表示されるかされないかに対して、明示的に「追加」という操作を行えるのがメリットです。

# カーネルを表示
(venv)$ jupyter kernelspec list
Available kernels:
  venv                                                        C:\Users\takey\AppData\Roaming\jupyter\kernels\venv

# 削除
(venv)$  jupyter kernelspec uninstall venv

トラブルシューティング

対処法2でカーネルを追加したけど、Pythonのパスがおかしい。

たとえばipython kernel install --user --name=hoge_venv --display-name=hoge_venvをして、hoge_venvカーネルを作成したとします。

そのhoge_venv環境のPythonがローカルの仮想環境であるvenv環境のパスではなく、たとえばcondaのPythonのパスになっていることがあります。

この場合、ipython kernel installしたときのipythonがconda環境のものを使っていることが原因と考えられます。

なので、仮想環境にpip install ipythonipythonをインストールしてやればよいです。

対処法2でカーネルを追加したけど、「Python requires ipykernel to be installed.」ポップアップが出る

github.com

カーネルhoge_venvに切り替えて、ipynbファイルのセルを実行したとき、上記のサイトのように「Python 3.8.3 64-bit ('base': conda) requires ipykernel to be installed.」というポップアップがでることがあります。

「install」ボタンを押しても「Could not install ipykernel. If pip is not available, ...」というメッセージが表示され、インストールに失敗します。

これの意味不明なところは、私の場合、このときメインではPython3.7系を使っていたはずなのですが、「Python3.8.3 64-bit (...) requires ...」と表示されていました。どうやら一番上に表示されているカーネルを参照してしまっているようです。

これの直し方ですが、VSCodePython拡張機能を一旦アンインストールし、再インストールすれば直りました。

【追記】VSCodeを再起動したら再度このポップアップが出るようになりました。VSCodeを右クリックで開くのではなく、タスクバーにピン留めして、そこから起動するとポップアップが出なくなったので(意味不明)、とりあえずそれで運用しています。

(ちなみにVSCodeの設定は、VSCodeの再起動をしないと設定が反映されないことが多いので、なんか反映していないと思ったらこまめにVSCodeを再起動するとよいです。)