Python の import
の仕組みって、意外と奥が深いですよね。特に、「Python はどうやってモジュールを見つけているの?」と疑問に思ったことがある人も多いはず。
今回は Python 3.13 の公式ドキュメント にある 「パスベースのファインダー(Path-Based Finder)」 の仕組みを、初心者でもわかるように ハンズオン形式 で解説します!
1. パスベースのファインダーとは?
Python が import
するとき、どのようにしてモジュールやパッケージを探すのかを決める仕組みのひとつが パスベースのファインダー です。
簡単に言うと?
- Python は
sys.path
にリストされているディレクトリや ZIP ファイルの中を探す。 import
するとき、これらのディレクトリ内で.py
ファイルや.pyc
ファイル、パッケージディレクトリなどを検索する。importlib.machinery.PathFinder
というオブジェクトが、この検索を担当する。
つまり、Python は sys.path
にあるディレクトリを順番にチェックしながら、指定されたモジュールを探しているんです!
2. ハンズオンで試してみる
では、実際に Python の import
の仕組みを試してみましょう!
ステップ 1: sys.path
を確認
Python は sys.path
にあるディレクトリを順番に探して、モジュールを見つけます。まずは、どんなパスが登録されているのかを確認してみましょう。
試してみよう
import sys
print("Python がモジュールを探すパス一覧:")
for path in sys.path:
print(path)
このコードを実行すると、Python が import
するときに検索するディレクトリのリストが出力されます。
ステップ 2: import
される場所を確認
次に、Python がどこから os
モジュールを読み込んでいるのか確認してみます。
試してみよう
import os
print(f"os モジュールのファイルパス: {os.__file__}")
このコードを実行すると、os
モジュールがどのディレクトリにあるのかがわかります。
ステップ 3: カスタムモジュールを作成
Python は sys.path
に登録されているディレクトリからモジュールを探します。
では、自分でモジュールを作って import
できるか試してみましょう!
1. ディレクトリを作成
まずは、新しいフォルダを作成します。
mkdir my_package
cd my_package
2. Python ファイルを作成
my_module.py
というファイルを作成し、次のように記述します。
# my_package/my_module.py
def greet():
return "Hello from my_module!"
3. モジュールをインポート
この my_package
を Python からインポートするには、カレントディレクトリを sys.path
に追加する必要があります。
import sys
sys.path.append("my_package")
import my_module
print(my_module.greet()) # "Hello from my_module!" が表示される
これで、自分で作った my_module
を Python に認識させ、import
できるようになりました!
ステップ 4: importlib
を使ってファインダーを試す
importlib.util.find_spec()
を使うと、Python がモジュールをどこで見つけたのかを調べることができます。
試してみよう
import importlib.util
module_name = "os"
spec = importlib.util.find_spec(module_name)
if spec:
print(f"{module_name} は {spec.origin} にあります")
else:
print(f"{module_name} は見つかりません")
これを実行すると、os
モジュールがどこにあるのかが表示されます。
3. まとめ
今回のハンズオンで、以下のポイントを学びました。
✅ Python は sys.path
にリストされているディレクトリからモジュールを探す。
✅ importlib.util.find_spec()
を使うと、どこでモジュールが見つかったのか確認できる。
✅ importlib.machinery.PathFinder
が Python の標準ファインダーとして動作している。
import
の仕組みを理解しておくと、カスタムモジュールを作るときや import
エラーのトラブルシューティングがスムーズにできるようになります!
ぜひ実際に試してみて、Python の import
の流れをつかんでみてください! 🚀