LoginSignup
147

More than 3 years have passed since last update.

posted at

updated at

PythonでImportErrorが起きたときの確認事項まとめ

概要

初心者が躓きがちなimportエラーの対処法をまとめてみました。

以下$ から始まるものはターミナルで、>>>で始まるものはpythonコンソールで実行してみてください。

1. pythonのバージョン

1. 1. ターミナル

$ python -V
=> Python 3.6.5

pyenvなどを使ってる場合は、ちゃんと使いたいインタプリタかを確認。

$ pyenv versions
 system
* 3.6.5 (set by /home/user/.pyenv/version)

$ which python
/home/user/.pyenv/shims/python3

1. 2. 実行環境

>>> import sys
>>> sys.executable # インタプリタへのパス
'/path/to/executable/bin/python'
>>> sys.version # バージョン
'3.6.5 (default, Jul 20 2018, 02:34:00)]'

2系と3系が共存している場合は3のつもりが2を呼び出してたりすることがあります。

2. パッケージがインストールされているか

$ pip freeze | grep numpy 
=> numpy==1.14.4

ここにない場合はpip installなどでインストールしましょう。
自作パッケージの場合は次の項目へ。

3. パスが通っているか

import文を読むとpythonは既定のパスにパッケージを探しに行きます。
そこにないとimportできないので確認。

>>> import sys
>>> sys.path
['', '/home/user/.pyenv/versions/3.6.5/lib/python36.zip', '/home/user/.pyenv/versions/3.6.5/lib/python3.6', '/home/user/.pyenv/versions/3.6.5/lib/python3.6/lib-dynload', '/home/user/.local/lib/python3.6/site-packages', '/home/user/.pyenv/versions/3.6.5/lib/python3.6/site-packages']

パスが通っていない場合は、以下のいずれかを試してください。

3. 1. パッケージをパスが通っている場所に置く

上記で調べたうちのどこか(path/to/python3.6/site-packagesなど)に置くか、シンボリックリンクを張ってください。

3. 2. パスを追加する

>>> sys.path.append('/path/to/module/')

3. 3. PYTHONPATHを設定する

$ export PYTHONPATH="/path/to/your/module/:${PYTHONPATH}"

などとシェルの設定ファイル(bashrcやzshrc)に書いて反映させる。

自作パッケージの場合、__init__.pyを忘れないように

mydirディレクトリのmymoduleモジュールをimportする場合

from mydir import mymodule

などと書きますが、from mydirの部分でImportErrorが出ることがあります。
これは__init__.pyがディレクトリ下にないとmydirがパッケージとして認識されないからです。
空でいいので__init__.pyをおいておきましょう。

4. 相対importの場合、実行場所に気をつける

相対importとは、

from . import mymodule
from ..foo import bar

のように、相対的なパス指定でのimportのことです。
この場合、このコードを実行している場所からの相対パスになるので注意しましょう。

5. 同じ名前の別のファイルやフォルダがプロジェクト内にないか

たとえばimport osをしたい場合に、osという同じ名前のファイル(os.py)やフォルダが
実行ファイルの付近にあるとそちらが優先的にimport対象となります。
意外と盲点なので、名前をつけるときは被らないように気をつけましょう。

6. 循環importをしていないか

a.py
import b
b.py
import a

これは循環参照なのでエラーになります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
147