Python で違うディレクトリにあるモジュールをインポートする

ここでは Python で違うディレクトリにあるモジュールをインポートする方法と、モジュールに関係する一覧を取得する方法についてご説明します。

違うディレクトリにあるモジュールをインポートする

これまで、組み込みモジュールと自分で作った同じディレクトリにあるモジュールをインポートして使ってみました。

モジュールを使うプログラムと違うディレクトリにあるモジュールをインポートしたい時は、そのまま import するとエラーになります。


モジュールをインポートする時、インタプリータはまず、組み込みのモジュールを探し、次に sys.path というディレクトリのリストから探します。

import しようとするスクリプトと同じディレクトリは sys.path に含まれるので、モジュールのファイルを同じディレクトリに置くと問題なくインポートされますが、違うディレクトリに置くとモジュールが見つけられません。


例えば、「Python モジュールの作成とインポート」で作った module1.py を modules というディレクトリを作ってその中に移動させ、先ほどと同じコードを実行すると次のようなエラーになります。

import module1

print(module1.add(1, 2, 3, 4, 5))

実行結果は次のようになり、module1 という名前のモジュールがないという ModuleNotFoundError になります。


こういう時は、次のようにして sys.path に modules ディレクトリ追加すると、module1 を import できるようになります。

sys.path に append する パスは module1.py ファイルを置いたディレクトリを指定してください。

import sys
sys.path.append('/Users/user1/Src/Python/modules')

import module1
print(module1.add(1, 2, 3, 4, 5))

実行結果は次のようになり、module1 モジュールの add 関数が実行できていますね。

15

sys.path のディレクトリの一覧を取得する

sys.path に入っているディレクトリを確認したい時は、次のように出力することができます。

import sys

print(sys.path)

私の環境では、実行結果は次のようになりました。

['/Users/user1/Src/Python', '/Library/Frameworks/Python.framework/Versions/3.8/lib/python38.zip', '/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8', '/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/lib-dynload', '/Users/user1/Library/Python/3.8/lib/python/site-packages', '/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages']

Python モジュール内の関数名などの一覧を取得する

モジュール内の関数名や変数名などの一覧を取得するには dir() 関数が使えます。

例えば、math モジュール内の関数名や変数名を取得するには次のようにできます。

import math

print(dir(math))

実行結果は次のようになります。

['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

以上、Python で違うフォルダにあるモジュールをインポートする方法と、モジュールに関係する一覧を取得する方法についてご説明しました。

© 2024 やさしい Python 入門