Pythonの標準ライブラリ活用術:モジュールとパッケージ入門

Pythonを使いこなすうえで欠かせないのが、モジュールパッケージの概念です。

これらを理解し、標準ライブラリを活用できれば、日々のプログラミングが格段に効率的になります。

本記事では、初心者向けにモジュールとパッケージの基本から、標準ライブラリの代表的な使い方を丁寧に解説します。


モジュール(module)とは

定義

Python のソースコードを記述した単一の .py ファイルのこと。

役割

関数・クラス・定数などをまとめておき、他のスクリプトから読み込んで再利用できる。

使い方
# ファイル名:mymodule.py
def hello():
    print("こんにちは、モジュール!")
# 別のスクリプトから
import mymodule
mymodule.hello()  # → こんにちは、モジュール!

パッケージ(package)とは

定義

複数のモジュールをまとめたディレクトリ(フォルダ)のこと。

構造

パッケージには必ず __init__.py という空または初期化用のファイルを置く(Python 3.3以降は省略可ですが、慣習的に置くことが多い)

役割

機能ごとにサブディレクトリを切ってファイルを整理し、大規模なプロジェクトで見通しをよくする。

使い方
mypackage/
├── __init__.py
├── mod_a.py
└── subpkg/
    ├── __init__.py
    └── mod_b.py
# mypackage/mod_a.py に定義
def foo(): print("foo in mod_a")
# mypackage/subpkg/mod_b.py に定義
def bar(): print("bar in mod_b")
# パッケージの利用例
from mypackage import mod_a
from mypackage.subpkg.mod_b import bar

mod_a.foo()  # → foo in mod_a
bar()        # → bar in mod_b

ライブラリ(library)とは

定義

モジュールやパッケージを集めて、ある分野の機能をまとめたもの。

標準ライブラリのPython 標準で付属しているライブラリ群(例:os、sys、datetime、mathなど)やサードパーティライブラリの外部が提供する追加インストール型のライブラリ(例:requests、NumPy、Pandasなど)があります。

使い方

標準ライブラリはインストール不要でそのまま import できます。

サードパーティライブラリは「pip install ライブラリ名」で導入してから import する。

pip install requests
import requests

res = requests.get("https://example.com")
print(res.status_code)

import モジュール名 の書き方・特徴

import モジュール名
機能

指定したモジュール全体を読み込みます。

呼び出し方

モジュール名をプレフィックス(接頭辞)として、モジュール内の関数やクラス、変数にアクセスします。

メリット
  • 名前の衝突を防ぎやすい(どのモジュール由来か一目でわかる)。
  • モジュール全体をまとめて管理できる。
デメリット

毎回モジュール名を付ける必要があるため、長いモジュール名だと冗長になる場合がある。

例:mathモジュール全体をインポート

import math

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

別名をつける(エイリアス)

長いモジュール名を短くしたい場合は、as で別名を付けられます。

import numpy as np

arr = np.array([1, 2, 3])
print(arr)  # → [1 2 3]

from モジュール名 import 名前 の書き方・特徴

from モジュール名 import 名前1, 名前2, …
機能

指定したモジュールから、必要な関数やクラス、変数だけを読み込みます。

呼び出し方

名前 を直接使えます(モジュール名のプレフィックス不要)。

メリット
  • 呼び出しがシンプル(モジュール名を付ける必要がない)。
  • 読み込む対象が明確なので、コードを見ただけで使っている機能がわかりやすい。
デメリット
  • 多数の名前をインポートすると、管理が煩雑になる可能性がある。
  • 名前が衝突しやすい(同名の関数を別モジュールからimportすると上書きされる)。

例:datetimeモジュールからdateだけをインポート

from datetime import date

today = date.today()
print(today)  # → 2025-04-29  など

複数の名前を同時に指定することもできます。

from os import path, mkdir

if not path.exists('data'):
    mkdir('data')

別名をつける場合

関数やクラス自体にも as で別名を付けられます。

from math import sqrt as msqrt

print(msqrt(25))  # → 5.0

ワイルドカードインポート(非推奨)

モジュール内のすべての名前を読み込みます。

推奨されない書き方なので、必要な名前だけを明示的に import しましょう。

from モジュール名 import *
注意点
  • どの名前を使っているのか分かりにくくなる。
  • 名前衝突のリスクが高い。

相対インポート(パッケージ内でのモジュール読み込み)

同じパッケージ内での呼び出しには「from .」「from ..」を使える。

my_package/
├── __init__.py
├── module_a.py   # def func_a(): ...
└── subpkg/
    ├── __init__.py
    └── module_b.py   # def func_b(): ...
# module_b.py 内
from ..module_a import func_a    # 一つ上の階層の module_a から
from .module_c import func_c     # 同じサブパッケージ内 module_c から

動的インポート(ランタイムにモジュール名が決まる場合)

Python標準の importlib を使って文字列から読み込むこともできます。

import importlib

module_name = "math"
math_mod = importlib.import_module(module_name)
print(math_mod.pi)    # → 3.141592653589793

プロジェクトの規模や用途に合わせて使い分けることで、可読性と保守性の高いコードを書くことができます。ぜひ試してみてください!