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! 🚀✨