pythonでImportError: No module named ・・・が出たときの確認方法と対処

Pythonでプログラムを記述して、実行した際に、

>>> from marionette import Marionette

Traceback (most recent call last):

 File “”, line 1, in

ImportError: No module named <モジュール名>

または

ImportError: cannot import name <モジュール名>

というエラーが出力されることがある。

これは、そのようなモジュールが見つけられないことを示している。そのため、以下のような対処法が考えられる。

インストールされているかを確認

まず、pipなどで追加モジュールをインストールした場合には、

<pythonインストールディレクトリまたはvirtualenv_dir>\Lib\site-packages

配下にモジュールのディレクトリがあって、インストールされているかを確認する。また、pythonのパッケージ管理の仕組みであるpipのコマンドを使って、

pip show <インストールモジュール名>

で、以下のように、インストールされているかどうかを確認することもできる。

>>pip show <モジュール名>
Name: marionette-driver
Version: 2.2.0
Summary: Marionette Driver
Home-page: https://wiki.mozilla.org/Auto-tools/Projects/Marionette
Author: Auto-tools
Author-email: tools-marionette@lists.mozilla.org
License: MPL
Location: c:\python\auto27\lib\site-packages
Requires: mozrunner, mozversion

パスが通っているかを確認

pipコマンドで確認できるのであれば、たいていは大丈夫だと思われるが、上記の場所にディレクトリはあるのにエラーが出る場合は、モジュールの検索パスに、上記のモジュールのディレクトリが存在していないことがある。

その場合は、Pythonの対話コマンドプロンプトなどで、

>>import sys
>>print sys.path

のようにすると、現在通っているパスが確認できる。

上記コマンドで表示されるパスの中にモジュールのディレクト入りが入っていない場合は、パスに含めるようにすると良い。

その方法も下記のように、いくつかある。後者の方がおすすめ。

PYTHONPATHに追加

pythonは、モジュールの検索パスに環境変数「PYTHONPATH」を利用するので、これに設定する。

ただし、virtualenvやvenvなどでバージョンやインストールするモジュールのバージョンを複数管理している場合は、すべてに環境変数を設定すると共有されてしまうので、望ましくないと思う。

ソースの最初で明示的に追加

その場合は、次のように、pyコードの最初でモジュール検索パスにAppendしてあげるとOK。

import sys
sys.path.append('/path/to/hogehoge')