Python 3.13 の「パスベースのファインダー」をハンズオンで理解しよう!5.5

当サイトではアフィリエイト広告を利用しています。

リファレンス

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 の流れをつかんでみてください! 🚀