記事ページを表示中

環境変数にモジュール検索パス(PYTHONPATH)を設定する方法|PYTHONの設定

記事No.71

更新日時2023年03月10日

バイオレットちゃん、今日はモジュール検索パスについて勉強するよ!

スカーレット

バイオレットちゃん

モジュール検索パスって何ですか?

pip等でインストールしたモジュールの保存場所のパスだよ。

スカーレット

バイオレットちゃん

モジュールをインストールしたら、必ずモジュール検索パスを設定しないといけないのですか?

pip等のパッケージ管理システムでインストールした場合は自動でモジュール検索パスも設定されるけど、モジュールを自作した場合などは、自分で設定しないと駄目だよ。

スカーレット

モジュール検索パスが設定されてないと、.pyファイル内で、importメソッドを使用してもモジュールを読み込む事が出来ません。

例えば、hogeというモジュールを読み込みたい場合、通常であれば以下のコマンドで読み込む事ができます。

import hoge

ですが、モジュール検索パス(hogeが保存されている場所までのパス)が通っていない場合、以下のようにモジュールが保存されている場所までのパスを入力しないとモジュールを読み込む事ができません。

import /home/myname/module/hoge

モジュール検索パスが通っていない場合でも、上のようにモジュールの保存場所も指定してimportすれば正常に読み込む事ができますが、モジュールを読み込む度に、保存場所を記述するのは大変です。

ですので、pythonでは、以下の流れでモジュールを読み込んでいます。

  1. importメソッドが実行される
  2. モジュール検索パス内に対象のモジュールがあるか確認する
  3. モジュールがある場合は、読み込む

pythonのモジュール検索パスは、PYTHONPATHという環境変数に代入する事でimportメソッド実行時に参照されます。

豆知識

環境変数とはOS内で実行される全てのプログラムから自由に参照できる変数です。

ModuleNotFoundError: No module named ‘任意のモジュール名’の原因

pythonファイルに、

import 使用したいモジュール名

と入力して、以下のようなエラーがでた場合、

ModuleNotFoundError: No module named '使用したいモジュール名'

原因の1つとして、使用したいモジュール検索パスが設定されていない事があげられます。

モジュール検索パスは、モジュールを自作した際や、インストールしたライブラリやモジュールの検索パスが自動で設定されていなかった際に自分自身で設定します。

ここでは、モジュール検索パスの設定方法について解説します。

コメントフォーム

モジュール検索パス(PYTHONPATH)が設定されているか確認する方法

モジュール検索パスが設定されているか確認するには、以下2つの方法があります。

  • コンソールからexport -pで確認する
  • pythonのsysライブラリを使う

$export -p を使う場合

$ export -p

「export」は、環境変数を設定するコマンドです。

オプションの「-p」は環境変数を一覧表示します。

以下のように環境変数の一覧が表示されます。

declare -x CONDA_PYTHON_EXE="/Users/name/opt/anaconda3/bin/python"
declare -x SHELL="/bin/bash"
declare -x LANG="ja_JP.UTF-8"
declare -x TERM="xterm-256color"
declare -x PYTHONPATH="/Users/pythonmodule"

ここで、

declare -x PYTHONPATH=”使用したいモジュールが入っているフォルダのパス”

が表示されていれば、環境変数(PYTHONPATH)にモジュール検索パス(/Users/pythonmodule)が正しく設定されています。

上の例の場合、/Users/pythonmoduleフォルダの中に使用したいモジュールが入っていれば、正常にモジュールを使用する事ができます。

もし、

declare -x PYTHONPATH=”使用したいモジュールが入っているフォルダのパス”

が表示されていない場合、環境変数にモジュール検索パスを設定する必要があります。

pythonのsysライブラリを使う場合

モジュール検索パスを確認する方法の2つめは、pythonのsysライブラリを使う方法です。

sysライブラリはpythonの標準ライブラリですので、インストールは不要です。

コンソールに以下のコマンドを入力します。

$ python3

pythonが対話モードで立ち上がります。

>>> import sys
>>> sys.path
#['', '/Users/pythonmodule', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages']

import sysでsysライブラリをインポートし、sys.pathで、モジュール検索パス一覧を表示します。

ここには、自分で設定したモジュール検索パスの他、ライブラリをインストールした際に自動で設定されたモジュール検索パスも表示されます。

コメントフォーム

環境変数にモジュール検索パスを継続して設定する方法

~/.bash_profile

ホームディレクトリ内に存在する.bash_profileを編集して以下のコードを入力します。

export PYTHONPATH="設定したいパス名"
豆知識

.bash_profileは、ユーザーがログイン(ホームディレクトリにアクセス)すると自動で実行されるファイルです。このファイルの中に「export PYTHONPATH=”設定したいパス名”」を入力しておく事で、ログインする度に、環境変数にモジュール検索パスが設定されます。

.bash_profileを編集する方法

.bash_profileを編集するには、コンソールで以下のコマンドを入力します。

チェックポイント

注1).bash_profileファイルのある場所はホームディレクトリの下です(~/.bash_profile)。ですので、.bash_profileを編集する際は「cd」コマンドを使用してホームディレクトリに移動して下さい。注2).bash_profileファイルは、隠しファイルです。ですので、「ls」コマンドを使用しても表示されません。ですので、「ls -a」コマンドを使用して表示させます。

$vi .bash_profile

viは、Linuxで使用できるテキストエディタです。

Linuxには最初からインストールされています。

上のコマンドは、viエディタで.bash_profileを編集するという意味です。

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

iは、viエディタで編集可能にするコマンドです。

編集可能(インサートモード)にしたら、ファイルの最下部に以下のコマンドを入力します。

export PYTHONPATH="設定したいパス名"

入力できたら、インサートモードを解除します。解除コマンドするには「esc」キーを押します。

最後に、以下のコマンドを入力し、.bash_profileを保存して終了します。

「:wq」コマンドはファイルを保存するコマンドです。

:wq
豆知識

ちなみに「q!」はviエディタを保存せずに終了するコマンドです。

sourceコマンドで.bash_profileの内容が実行されるようにする

.bash_profileを編集した後、以下のコマンドを実行します。

$ source .bash_profile

.sourceコマンドを使う事で、.bash_profileファイルに記述した内容が即時反映されます。

.bash_profileはログイン時に読み込まれるファイルの為、ファイルに記述した内容を反映させるにはパソコンの再起動が必要ですが、.sourceコマンドを実行すれば、即時反映されます。

スカーレット

環境変数が正しく設定できているか確認する方法

環境変数にモジュール検索パスを設定する事ができたら、コンソールに以下のコマンドを入力して、現在設定されている環境変数を確認します。

$ export -p

以下のように表示されたら、環境変数が正しく設定されています。

declare -x PYTHONPATH="設定したいパス"

コメントフォーム

その他のモジュール検索パスを設定する方法

モジュール検索パスを環境変数に設定する方法は、上記の方法以外にも、以下の方法があります。

  • sys.path.append(’設定したいパス’)
  • $ export PYTHONPATH=”設定したいパス”

ただ、この方法の欠点は、継続的に環境変数が設定されるわけではない、という事です。

例えば、sys.path.append(’設定したいパス’)は、各.pyファイル毎に入力しないと環境変数はリセットされます。

export PYTHONPATH=”設定したいパス”の場合も、入力後にコンソールを閉じたら環境変数はリセットされます。

sys.path.append(’設定したいパス’)

.pyファイルの中でモジュール検索パスを追加する場合に使用するコマンドです。

import sys
import pprint
 
pprint.pprint(sys.path)

モジュール検索パスは、sys.pathの中に格納されているので、pprint.pprintでその内容を表示させます。

もし、使用したいモジュールが入ったフォルダが検索パスに含まれていない場合は、以下のコマンドでパスを設定します。

sys.path.append('設定したいパス')

append()は、リストの最後に文字列を追加するメソッドです。

つまり、上記の場合、sys.pathに格納されているモジュール検索パスリストの最後に「設定したいパス」が追記されます。

export PYTHONPATH=”設定したいパス”

コンソールに以下のコマンドを入力する事で、モジュール検索パスを追加する事ができます。

export PYTHONPATH="設定したいパス"

この方法は、最初に解説した方法と同じですが、最初に解説した方法は「.bash_profileファイル」に、export PYTHONPATH=”設定したいパス”を入力していますが、今回の方法は、コンソールに入力しています。

ですので、ここで解説した方法の場合、コンソールが閉じれば、モジュール検索パスはリセットされます。

コメントフォーム

著者情報

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