【Python】Pythonのモジュールとインポートの基本!import文と自作モジュールの作り方

Python

こんにちは、かつコーチです。

今回は、Pythonを学び始めると必ず出てくるimportについて、基本から丁寧に解説します。

モジュールとは、変数や関数、クラスなどをまとめて保存したPythonのファイル1つのことです。

Pythonでは、便利な機能をすべて自分で書く必要はありません。

他の人が作ったモジュールや、Python自体に標準で用意されているモジュールをimport文で読み込むことで、少ないコードで多くの機能を使えるようになります。

私も学習を始めたばかりの頃、importfrom...importの違いが分からず、なんとなくコピペで使っていた時期がありました。

この記事を読めば、import文の基本、from...importとの違い、そして自作モジュールの作り方まで、しっかり理解できます。

モジュールとは?なぜインポートが必要なのか

モジュールの定義

モジュールとは、簡単に言うと「Pythonのコードが書かれた1つの.pyファイル」のことです。

例えば、次のようなmath_utils.pyというファイルがあったとします。

# math_utils.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

このmath_utils.pyは、それ自体が1つのモジュールです。

このモジュールの中に定義されたadd関数やsubtract関数を、別のファイルから使えるようにする仕組みがインポート(import)です。

なぜモジュールに分ける必要があるのか

すべての処理を1つの巨大なファイルに書いてしまうと、次のような問題が起こります。

  • どこに何の処理があるのか探しにくくなる
  • 複数人で同時に開発するとき、ファイルの競合が起きやすくなる
  • 同じ処理を別のプロジェクトで使い回したいときに、コピペするしかなくなる

処理の役割ごとにモジュールを分けておけば、必要な機能だけをimportして使い回せるようになります。

Pythonには、日付を扱うdatetime、乱数を扱うrandom、数学関数を扱うmathなど、あらかじめ数多くの標準モジュールが用意されています。

import文の基本の書き方

モジュール全体をインポートする

もっとも基本的な書き方は、import モジュール名です。

import math

print(math.sqrt(16))   # 4.0
print(math.pi)          # 3.141592653589793

import mathと書くことで、mathモジュールの中にある関数や変数を、math.関数名という形で使えるようになります。

このように「モジュール名.」を先頭に付けることで、どのモジュールの機能を使っているかが一目で分かります。

一部の機能だけをインポートする(from…import)

モジュールの中の特定の関数や変数だけを使いたい場合は、from モジュール名 import 名前という書き方をします。

from math import sqrt, pi

print(sqrt(16))  # 4.0
print(pi)          # 3.141592653589793

この書き方の場合、math.sqrt(16)ではなくsqrt(16)のように、モジュール名を省略して直接使えます。

コードは短くなりますが、後から読み返したときに「このsqrtはどこから来た関数なのか」が分かりにくくなる、というデメリットもあります。

別名を付けてインポートする(as)

モジュール名が長い場合や、名前の衝突を避けたい場合は、asを使って別名(エイリアス)を付けられます。

import pandas as pd
import numpy as np

df = pd.DataFrame({"name": ["田中", "佐藤"], "age": [20, 25]})

pandasnumpyのようなデータ分析でよく使うライブラリは、pdnpという別名を付けるのが業界標準的な慣習になっています。

自分でモジュールにエイリアスを付ける場合も、このasの書き方を使います。

よくあるつまずきポイント・エラー対処

つまずき1:ModuleNotFoundErrorが出る

Pythonの学習でほぼ全員が一度は遭遇するのが、次のエラーです。

ModuleNotFoundError: No module named 'requests'

私も初めてこのエラーを見たとき、「import requestsと書いただけなのになぜ失敗するのか」と戸惑いました。

原因は、標準モジュールではないライブラリは、事前にインストールしておく必要があるという点にあります。

mathrandomのような標準モジュールはPythonに最初から同梱されていますが、requestsのような外部ライブラリは別途インストールが必要です。

❌ Before:インストールせずにいきなりインポートしてしまう

import requests  # インストールされていないためエラーになる

response = requests.get("https://example.com")
ModuleNotFoundError: No module named 'requests'

✅ After:pipでインストールしてからインポートする

pip install requests
import requests

response = requests.get("https://example.com")
print(response.status_code)  # 200

pipとは、外部ライブラリをインストールするためのPython標準のパッケージ管理ツールです。

ModuleNotFoundErrorが出たら、まず「そのモジュールは標準モジュールか、それともpip installが必要な外部ライブラリか」を確認する癖をつけると、原因特定が早くなります。

つまずき2:自作モジュールが見つからない

自作モジュールを作って読み込もうとしたときに、次のようなエラーに遭遇することもあります。

ModuleNotFoundError: No module named 'math_utils'

これは、インポートする側のファイルと、モジュールのファイルが別のフォルダにある場合によく起こります。

project/
├── main.py
└── utils/
    └── math_utils.py

❌ Before:フォルダをまたいでそのままインポートしてしまう

# main.py
import math_utils  # utilsフォルダの中にあるため見つからない

print(math_utils.add(1, 2))
ModuleNotFoundError: No module named 'math_utils'

✅ After:フォルダ名を含めてインポートする

# main.py
from utils import math_utils

print(math_utils.add(1, 2))  # 3

サブフォルダの中にあるモジュールをインポートするときは、from フォルダ名 import モジュール名のように、フォルダの階層をそのままインポート文に反映させる必要があります。

私自身、フォルダ構成を整理し直した際にこのエラーに何度も遭遇し、「インポートはファイルの物理的な配置と連動している」ということを体で覚えました。

応用・一歩先の使い方

自作モジュールを作ってみる

ここまでの内容を踏まえて、実際に自作モジュールを作る手順を紹介します。

まず、計算用の関数をまとめたモジュールを用意します。

# calculator.py
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

TAX_RATE = 0.1

このファイルを、同じフォルダにある別のファイルからインポートして使います。

# main.py
import calculator

total = calculator.add(100, 200)
print(total)  # 300

price_with_tax = 1000 * (1 + calculator.TAX_RATE)
print(price_with_tax)  # 1100.0

このように、関数だけでなく変数も同じ仕組みでインポートできます。

if name == “main” の意味

自作モジュールを作るときによく見かける、次の書き方も紹介しておきます。

# calculator.py
def add(a, b):
    return a + b

if __name__ == "__main__":
    print(add(1, 2))  # このファイルを直接実行したときだけ動く

__name__とは、そのファイルがどのように実行されたかを表す特別な変数です。

calculator.pyを直接実行したときは__name__"__main__"になりますが、他のファイルからimportされたときは__name__がモジュール名("calculator")になります。

この仕組みを使うと、「このモジュールを直接実行したときだけ動作確認用のコードを実行し、インポートされたときは何も実行しない」という制御ができます。

自作モジュールを作るときの定番パターンなので、覚えておくと便利です。

まとめ

この記事のポイント

  • モジュールとはPythonのコードが書かれた1つの.pyファイルのこと
  • import モジュール名でモジュール全体を、from モジュール名 import 名前で一部の機能だけをインポートできる
  • asで別名(エイリアス)を付けられる
  • ModuleNotFoundErrorが出たら、標準モジュールか外部ライブラリかをまず確認する
  • 自作モジュールをフォルダをまたいでインポートするときは、フォルダの階層をインポート文に反映させる
  • if __name__ == "__main__":で、直接実行されたときだけ動く処理を書ける

次に読むべき記事

モジュールの基本が分かったら、次は関数の柔軟な引数の受け取り方を押さえていきましょう。

→ 次の記事:Pythonの可変長引数(*args・**kwargs)の使い方

タグ: Python, 初心者向け, 基本文法

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