記事ページを表示中

PYTHON|pip showを使用してパッケージが保存されているパスを調べ、そのパスをモジュール検索パスに追加しModule Not Found Errorを解消する方法

記事No.67

更新日時2023年02月18日

Module Not Found Errorについて

import パッケージ名orモジュール名

上記コマンドでパッケージやモジュールをインポートした際、Module Not Found Errorが出る事があります。

このエラーは、私達が指定したモジュールをpythonが見つける事ができなかった際に起こります。

このエラーを解消するには、以下2つの事を確認します。

1.パッケージをインストールしているか

2.モジュール検索パスが通っているか

※「モジュール」と「パッケージ」の意味を解説します。モジュールとはpythonで記述されたファイルです。拡張子は.pyです。パッケージとは、モジュールをまとめたフォルダです。モジュール(.pyファイル)には、クラスやメソッドが記述されており、私達は現在作成しているコードの中からモジュールをインポートして、それらのクラス、メソッドを使用します。

コメントフォーム

1.予めパッケージをインストールしているか

モジュールをインポートするには、予め使用したいモジュールが含まれているパッケージをインストールしている必要があります。

パッケージをインストールには、パッケージマネージャ(パッケージを管理するツール)を使用します。主に使用されるパッケージマネージャは、pipやcondaです。

pipはpythonの標準ライブラリ(pythonをインストールした際に自動でインストールされているライブラリ)です。

condaはAnacondaと呼ばれるディストリビューション(様々なソフトがまとめられているもの)で使用されます。

Anacondaは効率よく機械学習に必要な環境が整う事から機械学習を学ばれている方がインストールする傾向にあります。

機械学習(深層学習や強化学習など)を学ばれている場合は、conda、そうでない場合はpipを使うのがシンプルだと思います。

pipを使用する場合は、以下のコマンドでパッケージをインストールします。

$pip install インストールしたいパッケージ

condaを使用する場合は、以下のコマンドでパッケージをインストールします。

$conda install インストールしたいパッケージ

インストールが出来たら、正しくインストールされているか確認します。

pipでインストールした場合は、以下のコマンドで確認します。pip listはpipでインストールしたパッケージが表示されます。

$pip list

condaでインストールした場合は、以下のコマンドで確認します。conda listはcondaでインストールしたパッケージが表示されます。

$conda list

以下のようにパッケージ一覧が表示されますので、インストールしたパッケージが掲載されているか確認します。

Package                            Version
---------------------------------- -------------------
absl-py                            0.10.0
alabaster                          0.7.12
anaconda-client                    1.7.2
anaconda-navigator                 2.0.3
・・・

2.モジュール検索パスが通っているか

パッケージがインストールされているにも関わらず、Module Not Found Errorとなる場合、モジュール検索パスが通っていない可能性があります。

モジュール検索パスとは、使用したいモジュールが含まれているパッケージの場所を示すパスです。

例えば、pandasというパッケージをインストールした際モジュール検索パスが設定されていなかった場合、pythonファイル内で、

import pandas

と記述しても、pythonはpandasという名前のフォルダ(pandasパッケージ)がどこにあるか分からない為、Module Not Found Errorとなります。ですので、モジュール検索パスを追加して、これからインポートするパッケージがパソコン内のどこにあるかをpythonに伝えます。

モジュール検索パスを通す手順は以下です。

1.インストールしたパッケージが保存されている場所のパスを調べる

2.調べたパスをモジュール検索パスに追加する

1.インストールしたパッケージが保存されている場所のパスを調べる

まずは、インストールしたパッケージが保存されている場所のパスを調べます。以下のコマンドで、インストールしたパッケージがどこに保存されているか調べる事ができます。以下の例では、pandasというパッケージが保存されている場所のパスを調べています。

$pip show pandas

以下のような詳細情報が表示されます。

Name: pandas
Version: 1.2.4
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: https://pandas.pydata.org
Author: None
Author-email: None
License: BSD
Location: /home/name/anaconda3/lib/python3.8/site-packages
Requires: python-dateutil, pytz, numpy
Required-by: statsmodels, seaborn

Location: を見ると、pandasは、/home/name/anaconda3/lib/python3.8/site-packagesに保存されているのが分かります。

pandasまでの絶対パスは/home/name/anaconda3/lib/python3.8/site-packages/pandasとなります。

ここまでで、pandasがどこに保存されているかが分かりました。

pandasは、/home/name/anaconda3/lib/python3.8/site-packagesに保存されています。

つまり、/home/name/anaconda3/lib/python3.8/site-packagesをモジュール検索パスに追加すれば、私たちが、pythonファイル内に、import pandasと記述した際、pythonは、/home/name/anaconda3/lib/python3.8/site-packagesの中からpandasを参照してくれます。

コメントフォーム

2.調べたパスをモジュール検索パスに追加する

モジュール検索パスに追加する方法は大きく分けて2つあります。

1.使用する毎にモジュール検索パスを追加する方法

2.継続してモジュール検索パスを追加する方法

簡単で設定ミスが少ないのは1つめの方法ですが、使用頻度が高いモジュールの場合は、2つめの方法でモジュール検索パスを追加します。

1.使用する毎にモジュール検索パスを追加する方法

pythonファイルに以下を記述します。

import sys
sys.path.append('/home/name/anaconda3/lib/python3.8/site-packages')
import pandas

sysはpythonの標準ライブラリですので、インストールは不要です。注意点は、import pandasの前に記述する事です。

最初の2行でpandasが含まれているパスをモジュール検索パスに追加する事で、pythonにpandasがどこに保存されているか伝えます。そうする事で、3行目のimport pandasでModule Not Found Errorが起こりません。

sys.path.appendは、モジュール検索パスを追加するコマンドですが、以下のコマンドで設定されているモジュール検索パスをリスト形式で見る事ができます。

import sys
path_list = sys.path
print(path_list)

以下のように追加したモジュール検索パスが追加されていれば成功です。

['', '/home/name/anaconda3/lib/python38.zip', '/home/name/anaconda3/lib/python3.8', '/home/name/anaconda3/lib/python3.8/lib-dynload', '/home/name/anaconda3/lib/python3.8/site-packages']

この方法は、とてもシンプルで分かりやすい方法ですが、使用したいモジュールの検索パスを、その都度、pythonファイルに記述しなくてはいけません。

継続してモジュール検索パスを設定する場合は、次の方法を使用します。

2.継続してモジュール検索パスを追加する方法

継続してモジュール検索パスを追加するには、ホームディレクトリ内に存在する.bash_profileを編集します。

まずは、以下のコマンドでホームディレクトリに移動します。移動コマンドはcdです。

$cd /home/name
#もしくは、
$cd ~/

.bash_profileは隠しファイルですので、以下のコマンドで表示されます。lsはディレクトリ内のファイルを表示するコマンドです。オプションで、-aとすることで、全てのファイルが表示されます。

$la -a

.bash_profileがあれば、そのファイルを編集します。編集にはviを使用します。viはLINUXに最初からインストールされているテキストエディタです。

$vi .bash_profile

viエディタで.bash_profileを開いた後、「i」コマンドを入力します。

i

iは、ファイルを編集するコマンドです。編集可能(インサートモード)にしたら、ファイルの最下部に以下のコマンドを入力します。「PYTHONPATH」という変数に、インストールしたパッケージが保存されている場所のパスを追加して下さい。

export PYTHONPATH="/home/name/anaconda3/lib/python3.8/site-packages"

最後に、インサートモードから抜けて、編集した内容を保存して、viを閉じます。

viのインサートモードから抜けるには、キーボードのesc(エスケープ)キーを押します。

viで編集した内容を保存するコマンドは以下です。

:wq

これで、.bash_profileにモジュール検索パスが追加されました。ですが、今の段階では、追加した内容は反映されません。.bash_profileは、ホームディレクトリにログインされた際に読み込まれるファイルだからです。その為、一度、パソコンを再起動し、ホームディレクトリにログインする必要があります。

ただ、以下のコマンドを使用すればパソコンを再起動せずとも、.bash_profileを読み込ませる事ができます。

$source .bash_profile

ここまで来たら、以下のコマンドをpythonファイルに記述して、設定されているモジュール検索パスをリスト形式で確認します。

import sys
path_list = sys.path
print(path_list)

以下のように追加したモジュール検索パスが追加されていれば成功です。

['', '/home/name/anaconda3/lib/python38.zip', '/home/name/anaconda3/lib/python3.8', '/home/name/anaconda3/lib/python3.8/lib-dynload', '/home/name/anaconda3/lib/python3.8/site-packages']

コメントフォーム

著者情報

名前:スカーレット
2010年からWEBサイトやWEBアプリを作成しています。最初は趣味でブログを書いていましたがSEOを勉強するのが楽しくなり、そのままブロガーとして独立しました。その後、記事を書くだけでは物足りなくなり自分でWEBアプリの作成をスタート。現在はブロガー兼プログラマーとして活動しています。このWEBアプリ(ブロトーク)もDjangoで自作しました。ブロトークはブログとSNSを合体させたようなWEBアプリです。ブログを読んで気づいた事や感想などあれば、気軽にメッセージを送って頂ければと思います。WEB技術を一緒に勉強していけたらと思います。