jupyterが起動しないときに確認したこと

個人ブログの記事を移行しました。

はじめに

VSCodeでJupyterが動かせるようになってかなり便利度が増しましたが、ある日突然Jupyterが開けなくなりました。
いろいろ調べても見つからず、3日かかったのでメモしときます。
ただ、どれを行ったおかげで治ったのかが不明なため、一応行ったことをすべて書いておきます。

ちなみに、VSCodeでJupyterを触る方法については、VSCodeのドキュメントにあるので、見てください。

起こった現象①

Jupyterが起動しませんでした。(Jupyter Server: Not Started)

画像1

ずっとこの状態。
そこで、適当にセルを実行してみると、次のようなエラーが発生します。

Failed to connect to Jupyter notebook. http://localhost:8888/ Error: Invalid response: 403 Forbidden

そして、このエラーをググろうとしました。
すると、、

画像2

画像はgithub開いちゃってますけど、ブラウザでどこを開いても「このサイトにアクセスできません」と怒られてしまいます。
jupyter notebook list
で確認すると、サーバーが走っていました。
jupyter notebook stop 8888
で止まるかなとも思ったけど、止まりません。

これでどうしようもなくなり、とりあえず再起動。
アクセスはなんとか復活しました。

さて、これはどうしたもんか。
とりあえずいろいろやってみました。

プラグインを入れなおしてみる
これだけでは解決しませんでした。

jupyter labから開いてみる
jupyter labからなら開けるかなーと思い試してみました。
インストールしていない場合は、以下コマンドでインストールして使います。

> conda install -c conda-forge jupyterlab
> jupyter lab

起動。
すると、カーネルを選択したら次のようなエラーが発生しました。

Traceback (most recent call last):
 File "/mnt/c/Users/user/anaconda3/lib/python3.7/site-packages/tornado/web.py", line 1699, in _execute
 ... 長いので省略
FileNotFoundError: [Errno 2] No such file or directory: '/mnt/c/Users/user/.pyenv/versions/anaconda3-5.3.1/bin/python3.7': '/mnt/c/Users/user/.pyenv/versions/anaconda3-5.3.1/bin/python3.7'

なんかパスが前環境作ってたpyenvの方を参照してるな。。
多分違うカーネルで実行しようとしている?
→ この後のカーネル削除で解決した??

pythonやjupyterが入っているか、パスがあっているかを確認

バージョンと格納されているファイルを確認

> which python
/mnt/c/Users/shunt/anaconda3/envs/py3.7.3/bin/python

> conda info -e
 base      /mnt/c/Users/shunt/anaconda3
* py3.7.3   /mnt/c/Users/shunt/anaconda3/envs/py3.7.3

# もし、環境が異なっていたら(上の例だとbaseだったら)以下のように切り替える
> conda activate py3.7.3
> jupyter kernelspec list
Available kernels:
 python3   /mnt/Users/shunt/anaconda3/envs/py3.7.3/share/jupyter/kernels/python3

# jupyterがcondaに入っているかも確認
> conda list jupyter
# Name                    Version                   Build  Channel
jupyter                   1.0.0                    py37_7  
jupyter_client            6.0.0                      py_0  
jupyter_console           6.1.0                      py_0  
jupyter_core              4.6.1                    py37_0  
jupyterlab                2.1.0                      py_0    conda-forge
jupyterlab_server         1.1.0                      py_1    conda-forge

うん。特に問題なさそう。
あとは、VSCodeとanacondaの指定があっているかを確認します(Ctrl+Shift+P)

画像3

ちゃんとanacondaのを選べてるので問題なさそう。

余計なカーネルが存在していたので削除

変なカーネルを見に行ってしまっている気がしたので、カーネルの一覧をみて余計なものを削除しました。
上でjupyter kernelspec listを実行していて、カーネルは1つしかありませんが、それは削除してしまったためです。その時は複数存在してました。

> jupyter kernelspec list  # カーネルの一覧を表示
> jupyter kernelspec uninstall 名前  # localで作成していたカーネルがあったので削除

多分これのおかげで上のエラーが解消されました!
しかし、もう一度jupyter labから実行すると、次のようなエラーが発生。
ずらずらとDBのエラーのようなことが書かれていましたが、特にここですかね。

database disk image is malformed

このエラーをググってみたら、履歴データベースが残っていることが問題のようでした。
以下コマンドを実行してhistory.sqliteというファイルを削除します。
あとnbsignatures.dbというファイルも関係がありそうなので、消します。

> rm ~/.ipython/profile_default/history.sqlite  # history.sqliteファイルの削除
> jupyter --data-dir  # nbsignatures.dbの場所の確認
> rm 出てきたパス/nbsignatures.db  # nbsignatures.dbファイルの削除

これで、jupyter labを実行したら普通に動いた!
さらにVSCodeからも確認してみると、

画像4

起動してる!!
確信できる原因がよくわかりませんでしたが、とりあえず思いつくものをためしたらできたという感じでしょうか。
これでもダメな場合は、anacondaの再インストールとかを試すしかないですかね。。

起こった現象②

しばらく経って違うエラーでまた動かなくなったので、追記。
今回は次のようなエラーが発生しました。

Activating Python 3.7.3 64-bit ('py3.7.3': conda)

VSCodeのissueにも似たようなエラーが上がっていましたが、解決はしませんでした。
ただ、エラーで親切に対処法が書かれていたので、その通りに実行します。
anacondaのactivateの設定ファイルを修正する必要があるようです。
ファイルのパスは人によって異なると思うので、ファイルを探してエディタで開きます。

$ vim ~/anaconda3/bin/activate

以下のように変更します。

conda activate "$@"
    ↓
conda activate py3.7.3
echo 'エラーで出てきたトークン名を入れる'

VSCodeを再起動すると、Jupyterが復活しました。

おわりに

特に何もいじっていないのに急に発生したバグなので、なぜ起こったのかもわかっていませんが、同じような現象にあった人の助けになれば幸いです。
VSCodeのPython拡張はまだ不安定な部分もあるのかな、、、?