PythonにインストールしたモジュールがJupyterNotebookでModuleNotFoundErrorとなる。
この記事は「モジュールがPythonでインストールされているのに、Jupyter notebookではエラーになるときの解決法」を移植したものです。
Jupyter Notebook にて Python を使おうとしたところ、以下のようなモジュールエラーが発生しました。
PCでは、pyenv を用いてバージョンを指定して Python 環境を構築していましたが、その環境が Jupyter が参照している Python と一致していないことが原因でした。
Jupyterが参照しているPythonを確認する
モジュールは、site-packages というディレクトリにインストールされるので、Jupyter Notebook 上で site-packages のパスを確認します。
import sys
print(sys.version)
print(sys.path)
> 3.9.1 (default, Dec 10 2020, 10:36:35)
> [Clang 12.0.0 (clang-1200.0.32.27)]
['/Users/.../Documents/GitHub/.../',
'/usr/local/Cellar/python@3.9/3.9.1/Frameworks/Python.framework/Versions/3.9/lib/python39.zip',
'/usr/local/Cellar/python@3.9/3.9.1/Frameworks/Python.framework/Versions/3.9/lib/python3.9',
'/usr/local/Cellar/python@3.9/3.9.1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload', '',
'/usr/local/Cellar/jupyterlab/2.2.9_1/libexec/lib/python3.9/site-packages',
'/usr/local/Cellar/jupyterlab/2.2.9_1/libexec/lib/python3.9/site-packages/IPython/extensions',
'/Users/.../.ipython']
Jupyter Notebook では、Python 3.9.1 を参照していることが分かります。次に、ターミナル上で pyenv でインストールした Python を確認します。
% pip show numpy
Name: numpy
Version: 1.19.4
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email: None
License: BSD
Location: /Users/.../.pyenv/versions/3.7.7/lib/python3.7/site-packages
Requires:
Location をみると、Numpy は pyenv でインストールした Python 3.7.7(の site-packages下)にあることが分かります。
このように、参照している Python が異なるためにエラーが発生するようです。ここでは、Jupyter Notebook でも pyenv でインストールした Python を参照するようにしたいと思います。
pyenv でインストールした Python を参照する
ターミナルでカーネルを作成し、Jupyter Notebokの参照先を追加します。
% python -m ipykernel install --user --name=python3.7.7 --display-name=python3.7.7
Installed kernelspec python3.7.7 in /Users/.../Library/Jupyter/kernels/python3.7.7
--name や --display-name は適宜設定します。指定したいバージョンに合わせてネーミングすると良いと思います。
--name は、カーネルの情報が入るディレクトリ名
--display-name は jupyter 上での表示名
No module named ipykernel が出る場合は、ipykernel をインストールしてください。
% python -m ipykernel install --user --name=python3.7.7 --display-name=python3.7.7
/Users/.../.pyenv/versions/3.7.7/bin/python: No module named ipykernel
% pip install ipykernel
Collecting ipykernel...
Successfully installed ... ipykernel-5.4.2
作成したカーネルは以下のコマンドで確認することができます。
$ jupyter kernelspec list
Available kernels:
python3 /usr/local/Cellar/jupyterlab/2.2.9_1/libexec/lib/python3.9/site-packages/ipykernel/resources
python3.7.7 /Users/.../Library/Jupyter/kernels/python3.7.7
Jupter Notebook 上でも作成したカーネルを確認することができます。
作成したカーネルには「カーネル」>「カーネルの変更」で変更できます。