Python入門 第9回:モジュールとパッケージ

Python入門 第9回:モジュールとパッケージ Python

はじめに

Pythonでプログラムを作っていると、コードの量が少しずつ増えていきます。

最初は1つのファイルだけでも問題ありませんが、処理が増えてくると、次のような問題が起こります。

  • どこに何の処理が書かれているのか分かりにくい
  • 同じ処理を何度も書いてしまう
  • ファイルが長くなり、修正が難しくなる
  • 別のプログラムで同じ機能を使い回せない

このような問題を解決するために使用するのが、モジュールパッケージです。

モジュールを利用すると、プログラムを機能ごとに別のファイルへ分割できます。また、Pythonにあらかじめ用意されている便利な機能も、import文を使って簡単に利用できます。

今回は、import文の基本的な使い方から、自分で作成したモジュールの読み込み方、複数のモジュールをまとめるパッケージの仕組みまで解説します。


1. モジュールとは

モジュールとは、Pythonのプログラムを記述したファイルのことです。

Pythonでは、拡張子が.pyのファイルをモジュールとして扱えます。

例えば、次のようなファイルがあるとします。

sample.py

このsample.pyは、1つのPythonモジュールです。

モジュールの中には、次のようなものを記述できます。

  • 変数
  • 関数
  • クラス
  • 実行する処理

モジュールを利用することで、よく使う処理を別のファイルにまとめ、必要なときに読み込めるようになります。

例えば、足し算や引き算を行う関数を別のファイルにまとめておけば、複数のプログラムから同じ計算処理を利用できます。

main.py
calculation.py

この例では、メインの処理をmain.pyに記述し、計算に関する処理をcalculation.pyにまとめられます。

プログラムを機能ごとに分割することで、コードの見通しがよくなり、管理しやすくなります。


2. import文の基本

Pythonでモジュールを読み込むには、import文を使用します。

基本的な書き方は次のとおりです。

import モジュール名

例えば、Pythonに標準で用意されているmathモジュールを読み込む場合は、次のように記述します。

import math

mathは、平方根や円周率など、数学に関する機能をまとめたモジュールです。

モジュールを読み込んだだけでは、画面には何も表示されません。

import math

このコードを実行すると、mathモジュールがプログラム内で使用できる状態になります。

読み込んだモジュールの機能を使用するには、モジュール名の後ろにドットを付けて、使用する機能を指定します。

import math

print(math.sqrt(16))

実行結果は次のとおりです。

4.0

math.sqrt()は、指定した数値の平方根を求める関数です。

このように、モジュール内の機能を使用するときは、基本的に次の形式で記述します。

モジュール名.関数名()

3. モジュール名を指定して機能を使う

import文でモジュール全体を読み込んだ場合は、使用する機能の前にモジュール名を付けます。

import math

print(math.pi)
print(math.floor(3.8))
print(math.ceil(3.2))

実行結果は次のとおりです。

3.141592653589793
3
4

それぞれの機能には、次のような意味があります。

math.pi

円周率を表します。

math.floor(3.8)

小数点以下を切り捨てます。

math.ceil(3.2)

小数点以下を切り上げます。

モジュール名を付けることで、その関数や変数がどのモジュールに含まれているのか分かりやすくなります。

例えば、次のコードを見れば、sqrt()mathモジュールの関数であることをすぐに確認できます。

math.sqrt(25)

少し記述が長くなる場合もありますが、コードの意味が明確になるというメリットがあります。


4. from文で必要な機能だけを読み込む

モジュール全体ではなく、特定の関数や変数だけを読み込みたい場合は、fromを使用します。

基本的な書き方は次のとおりです。

from モジュール名 import 読み込む機能

例えば、mathモジュールからsqrt()関数だけを読み込む場合は、次のように記述します。

from math import sqrt

print(sqrt(16))

実行結果は次のとおりです。

4.0

この書き方では、sqrt()の前にmath.を付ける必要がありません。

sqrt(16)

複数の機能を読み込むこともできます。

from math import sqrt, pi

print(sqrt(25))
print(pi)

実行結果は次のとおりです。

5.0
3.141592653589793

必要な機能だけを読み込むと、コードを短く書けます。

ただし、どのモジュールから読み込まれた機能なのか分かりにくくなる場合があります。

次の2つの書き方を比べてみましょう。

import math

print(math.sqrt(16))
from math import sqrt

print(sqrt(16))

どちらも同じ結果になります。

初心者のうちは、機能の所属が分かりやすい次の書き方がおすすめです。

import math

4.1 アスタリスクを使った読み込み

次のように記述すると、モジュール内の多くの機能をまとめて読み込めます。

from math import *

この場合、モジュール名を付けずに関数や変数を使用できます。

from math import *

print(sqrt(16))
print(pi)

しかし、この書き方は基本的にはおすすめされません。

複数のモジュールから同じ名前の関数を読み込んだ場合、どの関数が使用されているのか分かりにくくなるためです。

また、プログラム内で使用できる名前が増えすぎてしまい、名前の重複が起こる可能性もあります。

そのため、使用する機能はできるだけ明示的に指定しましょう。

from math import sqrt, pi

5. asを使って別名を付ける

モジュール名が長い場合や、別の名前で使用したい場合は、asを使って別名を付けられます。

基本的な書き方は次のとおりです。

import モジュール名 as 別名

例えば、mathモジュールにmという別名を付ける場合は、次のように記述します。

import math as m

print(m.sqrt(16))
print(m.pi)

実行結果は次のとおりです。

4.0
3.141592653589793

別名を付けた後は、元のモジュール名ではなく、指定した別名を使用します。

m.sqrt(16)

関数に別名を付けることもできます。

from math import sqrt as square_root

print(square_root(36))

実行結果は次のとおりです。

6.0

asは、名前の長いモジュールを短い名前で扱いたい場合によく使用されます。

例えば、データ分析で使用されるモジュールでは、次のような別名が一般的です。

import numpy as np
import pandas as pd

ただし、分かりにくい名前を付けると、かえってコードが読みにくくなります。

別名には、モジュールの内容が想像できる名前を付けましょう。


6. Pythonの標準モジュール

Pythonには、インストール直後から使用できるさまざまなモジュールがあります。

これらは、標準ライブラリと呼ばれます。

標準ライブラリを利用すると、すべての処理を自分で作成する必要がありません。

ここでは、よく使用される標準モジュールをいくつか紹介します。


6.1 mathモジュール

mathモジュールでは、数学に関する処理を利用できます。

import math

print(math.sqrt(81))
print(math.pow(2, 3))
print(math.pi)

実行結果は次のとおりです。

9.0
8.0
3.141592653589793

math.pow(2, 3)は、2の3乗を計算しています。


6.2 randomモジュール

randomモジュールでは、ランダムな数値を生成できます。

import random

number = random.randint(1, 10)

print(number)

random.randint(1, 10)は、1から10までの整数をランダムに1つ生成します。

実行するたびに異なる数値が表示される可能性があります。

リストの中からランダムに要素を選ぶこともできます。

import random

colors = ["赤", "青", "黄"]

selected_color = random.choice(colors)

print(selected_color)

おみくじや簡単なゲームなどを作成するときに利用できます。


6.3 datetimeモジュール

datetimeモジュールでは、日付や時刻を扱えます。

import datetime

now = datetime.datetime.now()

print(now)

実行した時点の日時が表示されます。

2026-07-14 20:30:15.123456

年、月、日を個別に取得することもできます。

import datetime

now = datetime.datetime.now()

print(now.year)
print(now.month)
print(now.day)

6.4 osモジュール

osモジュールでは、フォルダやファイルパスなど、OSに関する処理を利用できます。

import os

current_directory = os.getcwd()

print(current_directory)

os.getcwd()は、現在の作業フォルダを取得する関数です。

ファイルを扱うプログラムでは、頻繁に使用されます。


7. 自作モジュールの作り方

Pythonでは、自分で作成した.pyファイルもモジュールとして読み込めます。

ここでは、計算用のモジュールを作成してみましょう。

まず、次の2つのファイルを同じフォルダに作成します。

main.py
calculation.py

フォルダの構成は次のようになります。

sample_project
├── main.py
└── calculation.py

calculation.pyに、次の関数を記述します。

def add(a, b):
    return a + b


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

このファイルには、足し算を行うadd()関数と、引き算を行うsubtract()関数が定義されています。

次に、main.pyからcalculation.pyを読み込みます。

import calculation

result1 = calculation.add(10, 5)
result2 = calculation.subtract(10, 5)

print(result1)
print(result2)

実行結果は次のとおりです。

15
5

自作モジュールを読み込む場合、ファイル名から.pyを除いた部分を指定します。

import calculation

次のようには記述しません。

import calculation.py

モジュールを読み込むときは、拡張子の.pyを付けないように注意しましょう。


8. 自作モジュールから変数や関数を読み込む

標準モジュールと同じように、自作モジュールでもfromを使用できます。

calculation.pyが次の内容だったとします。

def add(a, b):
    return a + b


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

main.pyからadd()関数だけを読み込む場合は、次のように記述します。

from calculation import add

result = add(10, 5)

print(result)

実行結果は次のとおりです。

15

複数の関数を読み込むこともできます。

from calculation import add, subtract

print(add(10, 5))
print(subtract(10, 5))

8.1 モジュール内の変数を使用する

モジュールには、関数だけでなく変数も定義できます。

例えば、settings.pyを次のように作成します。

app_name = "Sample App"
version = "1.0.0"

main.pyから読み込む場合は、次のように記述します。

import settings

print(settings.app_name)
print(settings.version)

実行結果は次のとおりです。

Sample App
1.0.0

設定値を別のファイルにまとめておくと、プログラムの設定を変更しやすくなります。


8.2 モジュール内で別のモジュールを読み込む

自作モジュールの中から、別のモジュールを読み込むこともできます。

例えば、circle.pymathモジュールを使用して、円の面積を計算してみましょう。

import math


def calculate_area(radius):
    return radius * radius * math.pi

main.pyから使用します。

import circle

area = circle.calculate_area(5)

print(area)

実行結果は次のとおりです。

78.53981633974483

このように、複数のモジュールを組み合わせてプログラムを作成できます。


9. モジュールを直接実行した場合の処理

自作モジュールを作成するときによく使用されるのが、次の記述です。

if __name__ == "__main__":

初めて見ると分かりにくいコードですが、モジュールを直接実行した場合と、別のファイルから読み込まれた場合で、処理を分けるために使用します。

例えば、calculation.pyを次のように変更します。

def add(a, b):
    return a + b


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


if __name__ == "__main__":
    print(add(10, 5))
    print(subtract(10, 5))

calculation.pyを直接実行した場合、次の処理が実行されます。

print(add(10, 5))
print(subtract(10, 5))

実行結果は次のとおりです。

15
5

一方で、main.pyから読み込んだ場合を考えてみましょう。

import calculation

print(calculation.add(3, 2))

実行結果は次のとおりです。

5

calculation.pyの次の部分は実行されません。

if __name__ == "__main__":
    print(add(10, 5))
    print(subtract(10, 5))

モジュールが直接実行された場合、__name__には"__main__"が入ります。

別のファイルからモジュールとして読み込まれた場合、__name__にはモジュール名が入ります。

確認するために、次のコードを実行してみましょう。

print(__name__)

ファイルを直接実行すると、次のように表示されます。

__main__

この仕組みは、モジュール内の関数をテストするときなどに便利です。


10. パッケージとは

パッケージとは、複数のモジュールをまとめたフォルダのことです。

プログラムの規模が大きくなると、すべてのモジュールを同じフォルダに置くだけでは管理しにくくなります。

そこで、関連するモジュールをフォルダごとに分けて整理します。

例えば、計算に関するモジュールをまとめる場合は、次のような構成にできます。

sample_project
├── main.py
└── calculation
    ├── __init__.py
    ├── basic.py
    └── geometry.py

この例では、calculationフォルダがパッケージです。

それぞれのファイルには、次のような役割を持たせられます。

basic.py

足し算や引き算など、基本的な計算処理を記述します。

geometry.py

円や長方形など、図形に関する計算処理を記述します。

__init__.py

そのフォルダをPythonのパッケージとして扱うために使用されるファイルです。

現在のPythonでは、__init__.pyがなくてもパッケージとして扱える場合があります。

ただし、パッケージであることを分かりやすくし、幅広い環境で正しく動作させるため、基本的には作成しておくとよいでしょう。

最初は、__init__.pyの中身は空でも問題ありません。


11. 自作パッケージの作り方

実際に、自作パッケージを作成してみましょう。

フォルダとファイルを次のように作成します。

sample_project
├── main.py
└── calculation
    ├── __init__.py
    ├── basic.py
    └── geometry.py

basic.pyには、次のコードを記述します。

def add(a, b):
    return a + b


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

geometry.pyには、次のコードを記述します。

import math


def circle_area(radius):
    return radius * radius * math.pi


def rectangle_area(width, height):
    return width * height

__init__.pyは、空のままでも問題ありません。

次に、main.pyから各モジュールを読み込みます。

from calculation import basic
from calculation import geometry

print(basic.add(10, 5))
print(basic.subtract(10, 5))

print(geometry.circle_area(3))
print(geometry.rectangle_area(4, 5))

実行結果は次のとおりです。

15
5
28.274333882308138
20

パッケージ内のモジュールを読み込むときは、次のように記述します。

from パッケージ名 import モジュール名

関数を直接読み込むこともできます。

from calculation.basic import add
from calculation.geometry import circle_area

print(add(10, 5))
print(circle_area(3))

11.1 ドットを使ってモジュールを指定する

パッケージ名とモジュール名をドットでつないで読み込むこともできます。

import calculation.basic

関数を使用するときは、パッケージ名、モジュール名、関数名をすべて指定します。

import calculation.basic

result = calculation.basic.add(10, 5)

print(result)

記述は長くなりますが、関数がどのパッケージとモジュールに含まれているか明確になります。

calculation.basic.add(10, 5)

11.2 __init__.pyで関数を読み込む

__init__.pyには、パッケージを読み込んだときの初期処理を記述できます。

例えば、calculation/__init__.pyに次のコードを記述します。

from .basic import add, subtract
from .geometry import circle_area, rectangle_area

先頭に付いているドットは、現在のパッケージ内にあるモジュールを表します。

このように設定すると、main.pyでは次のように関数を読み込めます。

from calculation import add, circle_area

print(add(10, 5))
print(circle_area(3))

パッケージを利用する側のコードを短くできます。

ただし、最初のうちは無理に__init__.pyへ処理を記述する必要はありません。

まずは、次のようにモジュールを明示して読み込む方法を理解しましょう。

from calculation.basic import add

12. モジュールを使用するときの注意点

モジュールやパッケージを利用するときには、いくつか注意点があります。


12.1 ファイル名を標準モジュールと同じ名前にしない

自作ファイルに、標準モジュールと同じ名前を付けると、正しく読み込めなくなる場合があります。

例えば、次のようなファイル名は避けたほうが安全です。

random.py
math.py
datetime.py
os.py

自分でrandom.pyというファイルを作成した状態で、次のコードを実行したとします。

import random

この場合、Python標準のrandomモジュールではなく、自分で作成したrandom.pyが読み込まれる可能性があります。

標準モジュールと区別できるファイル名を付けましょう。


12.2 モジュールは基本的に同じフォルダに置く

自作モジュールを初めて利用するときは、読み込む側のファイルと同じフォルダに置くのが簡単です。

sample_project
├── main.py
└── calculation.py

この状態であれば、main.pyから次のように読み込めます。

import calculation

別の場所にあるモジュールを読み込む場合は、Pythonがモジュールを検索する場所について理解する必要があります。

初めのうちは、関連するファイルを同じプロジェクトフォルダ内にまとめておきましょう。


12.3 モジュール名には分かりやすい名前を付ける

モジュール名には、そのファイルにどのような処理が入っているのか分かる名前を付けましょう。

例えば、計算処理をまとめる場合は次のような名前が考えられます。

calculation.py

ファイル操作をまとめる場合は、次のような名前が考えられます。

file_utils.py

名前だけでは内容が分からないファイル名は避けましょう。

test1.py
sample2.py
aaa.py

また、Pythonのファイル名には、基本的に半角英数字とアンダースコアを使用します。

user_data.py
file_manager.py
calculation_tools.py

12.4 循環インポートに注意する

モジュールAがモジュールBを読み込み、モジュールBがモジュールAを読み込む状態を、循環インポートと呼びます。

例えば、次のような関係です。

module_a.py → module_b.pyを読み込む
module_b.py → module_a.pyを読み込む

このような構造にすると、読み込みの途中で必要な関数がまだ定義されておらず、エラーが発生する場合があります。

初心者のうちは、モジュール同士が互いに読み込み合わないように設計しましょう。

共通して使用する処理がある場合は、別のモジュールに切り出す方法があります。

module_a.py
module_b.py
common.py

module_a.pymodule_b.pyの両方から、common.pyを読み込む構成にすると整理しやすくなります。


13. まとめ

今回は、Pythonのモジュールとパッケージについて解説しました。

モジュールとは、Pythonのコードを記述した.pyファイルです。

モジュールを読み込むには、import文を使用します。

import math

モジュール内の機能は、モジュール名と機能名をドットでつないで使用します。

math.sqrt(16)

必要な機能だけを読み込む場合は、fromを使用します。

from math import sqrt

モジュールや関数に別名を付ける場合は、asを使用します。

import math as m

自分で作成したPythonファイルも、モジュールとして読み込めます。

import calculation

複数のモジュールをフォルダにまとめたものが、パッケージです。

calculation
├── __init__.py
├── basic.py
└── geometry.py

パッケージ内のモジュールや関数は、次のように読み込めます。

from calculation.basic import add

モジュールやパッケージを使用すると、長くなったプログラムを機能ごとに分割できます。

コードを整理するだけでなく、一度作成した処理を別のプログラムで再利用できる点も大きなメリットです。

最初は1つのファイルで作成していたプログラムも、処理が増えてきたら、計算処理、ファイル操作、設定値などを別のモジュールへ分割してみましょう。


今回のポイント

  • .pyファイルはモジュールとして扱える
  • モジュールはimport文で読み込む
  • モジュール内の機能はドットを付けて使用する
  • fromを使うと、必要な機能だけを読み込める
  • asを使うと、モジュールや関数に別名を付けられる
  • 自分で作成したファイルもモジュールとして利用できる
  • 複数のモジュールをまとめたフォルダをパッケージと呼ぶ
  • __name__ == "__main__"で直接実行時の処理を分けられる
  • 標準モジュールと同じファイル名は避ける
  • モジュールを分割すると、コードの管理や再利用がしやすくなる

次回は、Pythonでエラーが発生した場合に処理を停止させず、安全に対応するための「例外処理」について解説します。

コメント

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