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 で違うフォルダにあるモジュールをインポートする方法と、モジュールに関係する一覧を取得する方法についてご説明しました。