PythonにおけるNo module namedの解決

2018-10-18

Python 環境で pip install したモジュールを import しようとしたら ModuleNotFoundError: No module named 'xxx' と怒られてしまうときに役立ちそうなことを書き残しておこうと思います.

インストールが成功したか確認

terminal

$ pip install numpy
$ pip list | grep numpy
numpy       1.14.3
numpydoc    0.8.0

インストールしたモジュールがインストール済みのモジュールリストの中にあるか調べるコマンドです.

インストールされていれば,モジュール名とバージョンが表示されます.

インストール先の確認

インストール先は実行環境ごとに異なります.例えば,Anaconda の仮想環境上でインストールしたときはその仮想環境下のディレクトリに保存されるため,他の環境からは呼び出すことができません.

terminal

$ pip show numpy
Name: numpy
Version: 1.14.3
...
Location: c:\users\mktia\anaconda\lib\site-packages (Windows はこんな感じ)

Location: /Users/mktia/.pyenv/version/Anaconda3-5.2.0/lib/python3.6/site-packages (macOS はこんな感じ)

Location の項目にインストール先が出ます.(モジュール検索パスと呼ぶ)

読み込んでいるディレクトリの確認

Python が実行されたときに読み込んでいるのはどのディレクトリであるかを取得することもできます.

import sys
import pprint
pprint.pprint(sys.path)
['',
 ...,
 'C:\\Users\\mktia\\Anaconda3\\lib\\site-packages',
 ...]

ここで取得できるパスの中に,インストール先のディレクトリがあればモジュールを読み込むことができるでしょう.

モジュール検索パスへの追加

インストールした先が認識されずに ModuleNotFoundError になっている場合は,インストール先をパスに追加することで解決できそうです.

import sys

sys.path.append('/path/to/search')

import numpy

パスを追加した後にモジュールを読み込めば OK らしいです.ただ,プログラムを動かすたびに追加する必要がでてしまうので,デフォルトで追加したい場合は PYTHONPATH で指定するといいようです.

ディレクトリ指定のインストール

terminal

$ pip install numpy -t /path/to/install

-t オプションを付けると,インストールするディレクトリを指定することができます.

インストール先を無理やり合わせるより,原因となる環境について考えたほうがいいような気がしますが,一応書いておきます.

最後に

Anaconda を使うと管理が楽 (な気がしてる) のでおすすめです.