概要(import は「他のファイルやライブラリの機能を使えるようにする」仕組み)
import は、他のモジュール(Pythonファイル)やライブラリにある関数・クラス・定数を自分のコードで使えるようにする文です。自前でゼロから書くのではなく、信頼できる機能を呼び出せるので、コードが短く安全になり、保守もしやすくなります。
import math
print(math.sqrt(16)) # 4.0
Python基本の書き方と名前空間(ここが重要)
import モジュール名(モジュールごと読み込む)
最も基本的な形です。モジュールの中身へは「モジュール名.名前」でアクセスします。この“前置き”があることで、どこから来た機能かが一目で分かり、可読性が上がります。
import random
n = random.randint(1, 6)
Pythonfrom モジュール import 名前(必要なものだけ取り出す)
特定の関数・クラスだけを直接名前として使えます。呼び出しが短く書けますが、「どのモジュール由来か」がコード上で分かりにくくなるため、公共の API では多用しすぎないのがコツです。
from math import sqrt, pi
print(sqrt(9), pi) # 3.0 3.1415...
Pythonas で別名を付ける(長い名前や慣習の短縮形)
モジュール・関数に別名を付けて読みやすくします。業界慣習の短縮名(例:numpy を np)を使うと、読み手が理解しやすくなります。
import datetime as dt
print(dt.datetime.now())
Pythonワイルドカード import(from … import *)の注意点
使わない方が安全(名前の衝突と可読性低下)
「全部取り込む」は便利に見えて、どの名前がどこから来たのか不明瞭になり、思わぬ上書きや衝突を招きます。学習用の短いスクリプトを除き、基本は使いません。必要なものだけを明示して取り込みましょう。
# 非推奨:from math import *
# 推奨:from math import sqrt, pi
Python実行タイミングと main(import の実行は一度だけ)
import 時に「モジュール直下」は一度だけ実行される
モジュールのトップレベルのコードは、最初の import で一度だけ実行されます。ここで印字やファイル操作などの“副作用”を書くと、意図せず動いてしまいます。定義中心に保ち、起動コードは main ブロックへ。
# app.py
def run():
print("アプリ開始")
if __name__ == "__main__": # 直接実行されたときだけ実行
run()
Python何度 import しても再実行されない(キャッシュされる)
すでに読み込まれたモジュールはキャッシュされ、同一プロセス内で再 import してもトップレベルは再実行されません。動作を再読み込みしたい場合は reload を使います(通常は不要)。
import importlib, mymodule
importlib.reload(mymodule) # 特殊な事情で再読み込みしたいとき
Pythonモジュール探索とパス(どこから見つけてくるか)
sys.path にある場所を順に探す
Python は「現在のスクリプトのフォルダ」「標準ライブラリの場所」「インストール済みパッケージの場所」などを順番に探索します。自作モジュールを別フォルダに置くときは、パッケージ化してインストールするか、絶対インポートで参照可能な配置にしましょう。
import sys
print(sys.path) # 探索パス一覧(学習用の観察に便利)
Python仮想環境の中でインストールしたライブラリだけが見える
プロジェクトごとに依存を分けるため、仮想環境を使うのが一般的です。その環境にインストールしたライブラリだけが import できます。環境を切り替えたら、必要なパッケージを入れ直しましょう。
パッケージと相対/絶対インポート(階層構造の扱い方)
パッケージは「フォルダでまとめたモジュール群」
プロジェクトが大きくなったら、目的別にフォルダ(パッケージ)で整理します。サブフォルダのモジュールは「パッケージ名.モジュール名」で絶対インポートすると読みやすく、ツール補完も効きやすいです。
project/
core/
model.py
data/
loader.py
# 例:絶対インポート
from project.core.model import predict
Python相対インポートは「同じパッケージ内の参照」を明示
同一パッケージ内での参照なら、相対インポートが簡潔です。外部には公開されない内部関係を示すのに向いています。
# data/loader.py(同じパッケージ内)
from ..core.model import predict
Python循環インポートの回避(相互に import しない設計)
依存方向を整理するか、共通部を分離する
A が B を、B が A を import すると読み込み順の問題で失敗しがちです。共通の機能を別モジュールに切り出す、依存方向を一本化するのが基本解です。最終手段として「関数内で遅延 import」もあります。
def handler():
from .service import run # 関数内で読み込む(遅延 import)
return run()
Python例題で身につける(定番から一歩先まで)
例題1:基本の import と from import
import math
from math import sqrt
print(math.pi) # モジュール名を前置
print(sqrt(16)) # 直接呼び出し
Python例題2:as で別名を付けて読みやすく
import datetime as dt
from pathlib import Path as P
now = dt.datetime.now()
data = P("data") / "input.csv"
print(now.isoformat(), data)
Python例題3:自作モジュールの分割と再利用
# utils.py
def normalize(s: str) -> str:
return s.strip().casefold()
def slugify(s: str) -> str:
return "-".join(normalize(s).split())
Python# main.py(同じフォルダ)
import utils
print(utils.slugify(" Coffee Latte ")) # 'coffee-latte'
Python例題4:main で「実行時だけ」動かす
# cli.py
def run():
print("CLI 起動")
if __name__ == "__main__":
run()
Pythonまとめ
import は「他のモジュールやライブラリの機能を取り込む」ための基本。まずは「モジュールごと読み込んで名前空間を前置」する形を土台にし、必要なら from import で最小限を取り出し、as で可読性を整える。トップレベルの副作用は避け、起動コードは main に隔離。探索パスとパッケージ構造を理解し、循環インポートを設計で回避する。この基本線を守るだけで、あなたのコードは整理され、拡張に強く、学習も実務も気持ちよく進みます。
