見出し画像

PythonにインストールしたモジュールがJupyterNotebookでModuleNotFoundErrorとなる。

この記事は「モジュールがPythonでインストールされているのに、Jupyter notebookではエラーになるときの解決法」を移植したものです。


Jupyter Notebook にて Python を使おうとしたところ、以下のようなモジュールエラーが発生しました。

ModuleNotFoundError: No module named 'numpy'

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 上でも作成したカーネルを確認することができます。

作成したカーネルには「カーネル」>「カーネルの変更」で変更できます。

「カーネル」>「カーネルの変更」> 作成したカーネルを選択する。

この記事が気に入ったらサポートをしてみませんか?