【Python入門】import の仕組みをハンズオンで理解しよう!5.3

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

リファレンス

Python の import って、最初はシンプルに見えても、ちょっと複雑なプロジェクトになると「どこを探してるの?」と迷子になりがちですよね。

今回は 初心者でも理解しやすいように、実際にコードを書きながら import の仕組みを学んでいきます!💡


📌 この記事のゴール

✅ Python が import するときにモジュールをどのように探すのかを理解する
sys.path を使って検索パスを確認する
PYTHONPATH 環境変数の影響を知る
import のデバッグ方法を学ぶ


🔥 1. import の基本

まずは、シンプルな import の例からスタート!

✅ まずは hello.py を作ろう

# hello.py
def say_hello():
    print("Hello, world!")

次に、hello.py を別のファイル main.py からインポートします。

# main.py
import hello

hello.say_hello()

✅ 実行すると…

python main.py

出力

Hello, world!

Python は hello.py自動的に探して実行 してくれましたね! 🎉

では、Python は どこを探しているのか? を確認してみましょう。


🔥 2. sys.path を確認してみる

Python は import するとき、どこを探しているのでしょう? sys.path を使ってチェックしてみましょう!

sys.path を表示するコードを main.py に追加

import sys

print("\n=== sys.path ===")
for p in sys.path:
    print(p)

✅ 実行してみる

python main.py

出力例

=== sys.path ===
/Users/username/projects
/usr/lib/python3.10
/usr/lib/python3.10/lib-dynload
/home/user/.local/lib/python3.10/site-packages

🔍 sys.path は、Python が import するときにモジュールを探すフォルダのリストです!


🔥 3. Python がモジュールを探す順番

Python は import するとき、以下の順番 でモジュールを探します。

1️⃣ 現在のディレクトリsys.path[0]
2️⃣ 標準ライブラリのフォルダ
3️⃣ site-packages(インストールしたパッケージ)


🔥 4. PYTHONPATH 環境変数の影響

PYTHONPATH を設定すると、Python の検索パスを変更できます。試してみましょう!

my_modules/greet.py を作成

まず、新しいフォルダを作り、そこに greet.py を追加します。

project/
│── main.py
│── my_modules/
    └── greet.py

greet.py の中身

def greet():
    print("Hello from greet.py!")

では、main.py でこの greet.py をインポートしてみます。

import greet  # ❌ 失敗する
greet.greet()

✅ 実行するとエラー発生

python main.py

🚨 エラー

ModuleNotFoundError: No module named 'greet'

❌ なぜエラー?

Python は sys.path にあるフォルダしか探さないので、my_modules/ 内の greet.py を見つけられないのです!


✅ 解決策①:sys.path.append() を使う

以下のように sys.path.append() を使えば、一時的に検索パスに my_modules/ を追加できます。

import sys
sys.path.append("my_modules")  # my_modules を検索パスに追加

import greet
greet.greet()

🔁 これで成功!


✅ 解決策②:環境変数 PYTHONPATH を設定する

毎回 sys.path.append() するのは面倒ですよね? PYTHONPATH を設定すると、環境変数で解決できます!

export PYTHONPATH=$PYTHONPATH:$(pwd)/my_modules
python main.py

実行結果

Hello from greet.py!

環境変数を使うことで、Python に「ここも探して!」と伝えることができました 🎉


🔥 5. import のデバッグ方法

もし import がうまくいかない場合、どこを探しているのかを調べる方法を知っておくと便利です!

sys.path を表示する

import sys
print(sys.path)

importlib.util.find_spec() を使う

import importlib.util

module_name = "greet"
spec = importlib.util.find_spec(module_name)
if spec is None:
    print(f"⚠️ {module_name} は見つかりません!")
else:
    print(f"✅ {module_name} は {spec.origin} にあります!")

実行結果

✅ greet は /Users/username/projects/my_modules/greet.py にあります!

🚀 まとめ

学んだこと 説明
sys.path Python が import する場所をリストで保持
モジュールの検索順 ①現在のディレクトリ → ②標準ライブラリ → ③site-packages
PYTHONPATH 環境変数で検索パスを追加できる
sys.path.append() 一時的に検索パスを追加できる
importlib.util.find_spec() モジュールがどこにあるかを確認できる

🎯 まとめ & 次のステップ

これで Python の import の仕組み がしっかり理解できましたね!

次のステップとして、自分のプロジェクトで sys.path を確認してみたり、PYTHONPATH を使って import の動作をカスタマイズしてみましょう! 💡

それでは、Happy Coding! 🚀✨