Pythonのimportによるモジュールの読み込みと使い方をわかりやすく解説

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

importの概要

モジュールの読み込み Python予約語

import

概要 import(インポート)は、Pythonの標準ライブラリ、外部パッケージ、または自身で作成した別ファイルのスクリプト(モジュール)をプログラム内に組み込み、「そこに定義されている関数やクラスなどの資産を再利用できるようにする」ためのキーワードです。

わかりやすく説明 import は、プログラムに「外部の専門家(道具箱)を呼び出す」ための命令です。Pythonの本体はあえて機能を最小限に抑えて軽量に作られていますが、必要に応じて「数学の専門家(math)」や「時間の専門家(time)」を import で召喚することで、複雑な計算や高度な処理を1からコードを書くことなく一瞬で実現できるようになります。

  • 記述することで、指定したモジュール内のすべての関数、クラス、変数が現在のプログラムのメモリ空間に展開されます。
  • from 構文を併用することで、モジュール全体ではなく、特定の関数やクラスだけをピンポイントで引き抜いて読み込むことも可能です。
  • as キーワードを添えれば、長くて呼び出しにくいモジュール名に短い「ニックネーム(別名)」を付けてコードをスッキリさせることができます。

importの考え方をイメージで理解

importの基本的な使い方

Pythonに標準で備わっている数学用ライブラリ math を読み込み、その中にある平方根計算関数(sqrt)を呼び出す最も基本的な例です。

# import を使ってモジュールを読み込む
import math

result = math.sqrt(25)  # mathモジュールの中にある「sqrt」を呼び出す
print(result)  # 結果: 5.0
  • import モジュール名 で読み込んだ場合、その中の機能を使うためには必ず モジュール名.関数名() のように、ドット(.)を繋いで「どこに所属している機能か」を明示する必要があります。

特定の機能のみをインポート(from import)

モジュール名(所属)をいちいち書くのが面倒な場合、from を用いて特定の関数だけを現在のプログラムに直接インストールする手法です。

# mathモジュールから、sqrt関数だけをダイレクトにインポート
from math import sqrt

result = sqrt(36)  # 「math.」を付けずに直接関数名だけで実行可能
print(result)  # 結果: 6.0

エイリアス(別名)を使ったインポート

データ分析などで頻繁に呼び出す大規模な外部ライブラリは、タイピングの負担を減らすため、as を使って一般的な業界標準の略称(別名)に置き換えてインポートします。

# numpy という長い名前を、以降は「np」として扱う
import numpy as np

array = np.array([1, 2, 3])  # numpy.array と同じ意味になります
print(array)

複数のモジュールをインポート

文法上、カンマ(,)で区切ることで1行にまとめて複数のモジュールを並べることができます。

# 複数のモジュールを1行で記述
import os, sys

print(os.name)      # OSの種類を表示
print(sys.version)  # Pythonのバージョンを表示
  • 1行にまとめられますが、Pythonの公式コーディング規約(PEP 8)では、可読性とメンテナンス性を高めるためにモジュールごとに1行ずつ分けて書くことが強く推奨されています(後述の注意点を参照)。

ユーザー定義モジュールのインポート

同じフォルダ(ディレクトリ)内にある別のPythonファイルも、ファイル名から .py を除いた名前を指定することで簡単にインポートして連携させることができます。

# 同じフォルダにある自作ファイル「mymodule.py」を読み込む
import mymodule

mymodule.hello()  # mymodule.py 内で定義されている hello() 関数を実行

外部ライブラリのインポート

世界中の開発者が公開している便利な外部パッケージ(例:Web通信用の requests)を利用する場合は、事前にターミナル(コマンドプロンプト)でインストールを済ませてからインポートします。

# 【事前準備】PCのターミナル等で以下のコマンドを実行
pip install requests
# インストール完了後、Pythonコード側でインポート
import requests

response = requests.get("https://www.example.com")
print(response.status_code)  # 結果: 200(通信成功)

importの注意点

  • 「from モジュール import *」というワイルドカード指定は原則禁止(最重要)from math import * と書くと、そのモジュール内のすべての関数を所属名(math.)なしで直接使えるようになり一見便利ですが、自作の関数名や他のモジュールの関数名と名前が衝突し、上書きされてバグを引き起こす最大の原因になります。実務では必ず名前を明示してインポートしてください。
    # 【失敗を招く危険なコード例】
    from module_A import *
    from module_B import *
    
    # もし両方のモジュールに「setup()」という同名の関数があった場合、
    # 後から読み込んだmodule_Bの機能で勝手に上書きされ、module_Aの処理が動かなくなる致命的なバグになります
  • 自作のファイル名が、標準ライブラリの名前と被るとシステムがクラッシュする:たとえば、自分で作成したスクリプトに math.pyrandom.py という名前を付けて保存してしまうと、Pythonは標準ライブラリではなく「あなたのアカウントが作った目の前の math.py」を最優先でインポートしてしまいます。その結果、本来の数学関数が読み込めなくなりプログラム全体がエラーで動かなくなります。ファイル名には固有の分かりやすい名前を付けましょう。
  • PEP 8に準拠したインポートの記述順序ルール:インポート文は必ずスクリプトの最上部(ファイルの先頭)にまとめて記述し、さらに以下の3つのグループ順に並べ、それぞれの間には空行を1行挟むのが世界共通の美しいルールです。
    1. 第1グループ:標準ライブラリ(Pythonに最初から組み込まれているもの:os, sys, math など)
    2. 第2グループ:サードパーティライブラリ(pipで後から入れた外部パッケージ:requests, numpy など)
    3. 第3グループ:ローカルアプリケーション設定(同じプロジェクト内の自作ファイル)
    # 【美しい配置の模範例】
    import math
    import os
    
    import requests
    
    import mymodule

importのよくある質問

Q: `import` と `from ... import` はどちらを使うのが適切ですか?基準はありますか?
A: モジュールの規模や、使う関数の頻度で使い分けします。 基本的には、コードを読んだ他の人が「この関数はどのライブラリから持ってきたものか」が一目で判別できるように、import math のように所属を明記する書き方が最も安全です。 ただし、1つのファイル内で math.sqrt() を何十回も連続して使う場合や、モジュール名が非常に長くてコードが横に肥大化してしまう場合は、from math import sqrt を使ってスッキリ記述する方が好まれます。
Q: モジュールを一度インポートしたあと、プログラムの途中で中身(ソースコード)を書き換えた場合、自動的に反映されますか?
A: 反映されません。Pythonはパフォーマンスを最適化するため、同じプログラムの実行中に一度 import 完了したモジュールは、二度目以降の import 文を無視(キャッシュから読み込み)する仕様になっています。もし対話型環境(Jupyter Notebookなど)で、外部ファイルを修正した結果をリアルタイムに再読み込みさせたい場合は、importlib という専用のモジュールを使ってリロード命令を下す必要があります。

# 修正した自作モジュールを強制的に最新状態へ再読込する手順
import importlib
import mymodule

importlib.reload(mymodule)  # これでファイルの最新の変更が即座に反映されます

まとめ

import は、世界中のエンジニアが開発した無数の拡張機能(エコシステム)へアクセスし、自身のプログラムを無限にスケールさせるための鍵となる予約語です。

  • 標準搭載のモジュールや、外部からインストールしたパッケージ、自作の別ファイルを現在のプログラムにロードする。
  • from による機能のピンポイント抽出や、as によるニックネーム付与を活用し、ソースコードの可読性を適切にコントロールする。
  • 名前の衝突リスクを避けるため、ワイルドカード(*)の使用を控え、モジュール名と重複するようなファイル名(math.pyなど)の作成を避ける。

実務の現場では、Webサーバーの構築から人工知能のモデル構築にいたるまで、あらゆる開発が膨大な import の上に成り立っています。読み込みの順序や作法(PEP 8)を正しく守り、美しくモジュール化された安全なプログラム設計のスキルを身につけましょう。