Python | 関数:import の基本

Python
スポンサーリンク

概要(import は「他のファイルやライブラリの機能を使えるようにする」仕組み)

import は、他のモジュール(Pythonファイル)やライブラリにある関数・クラス・定数を自分のコードで使えるようにする文です。自前でゼロから書くのではなく、信頼できる機能を呼び出せるので、コードが短く安全になり、保守もしやすくなります。

import math
print(math.sqrt(16))  # 4.0
Python

基本の書き方と名前空間(ここが重要)

import モジュール名(モジュールごと読み込む)

最も基本的な形です。モジュールの中身へは「モジュール名.名前」でアクセスします。この“前置き”があることで、どこから来た機能かが一目で分かり、可読性が上がります。

import random
n = random.randint(1, 6)
Python

from モジュール import 名前(必要なものだけ取り出す)

特定の関数・クラスだけを直接名前として使えます。呼び出しが短く書けますが、「どのモジュール由来か」がコード上で分かりにくくなるため、公共の API では多用しすぎないのがコツです。

from math import sqrt, pi
print(sqrt(9), pi)  # 3.0 3.1415...
Python

as で別名を付ける(長い名前や慣習の短縮形)

モジュール・関数に別名を付けて読みやすくします。業界慣習の短縮名(例: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 に隔離。探索パスとパッケージ構造を理解し、循環インポートを設計で回避する。この基本線を守るだけで、あなたのコードは整理され、拡張に強く、学習も実務も気持ちよく進みます。

タイトルとURLをコピーしました