Python のコードは、目的別に モジュール(ファイル)に分けて書きます。本記事では、標準ライブラリ・サードパーティ・自作モジュールの 3 種類の位置づけと、import の書き方を整理します。

目次

  1. モジュールとは
  2. 基本の import
  3. from … import … — 必要なものだけ取り出す
  4. as — 別名を付ける
  5. サードパーティのモジュール
  6. 標準ライブラリで覚えておくと便利なもの
  7. 自作モジュールを作る
  8. パッケージ — モジュールをディレクトリにまとめる
  9. name == “main” のイディオム
  10. import の探索順

モジュールとは

モジュールとは「Python のコードが書かれた .py ファイル」のことです。import でモジュールを読み込むと、その中の関数・クラス・定数を別のファイルから使えるようになります。

モジュールの種類は次の 3 つに分かれます。

種類入手元
標準ライブラリPython 本体に同梱math / datetime / json
サードパーティpip install で導入pandas / numpy / requests
自作モジュール自分で作る .pyanalysis.py / data_loader.py

基本の import

最も素朴な形は、モジュール名をそのまま読み込む書き方です。

import math
print(math.sqrt(252)) # 15.874... (年率換算でよく使う sqrt(営業日))
print(math.pi) # 3.14159...

モジュール内の関数や定数は、モジュール名.名前 の形でアクセスします。

from … import … — 必要なものだけ取り出す

特定の関数や定数だけ使いたい場合は、名前を直接取り出せます。

from math import sqrt, pi
print(sqrt(252)) # 15.874...
print(pi) # 3.14159...

math. を毎回書かずに済む」のがメリットですが、別のモジュールにも同じ名前があると衝突します。プロジェクト全体でルールを揃えるのが望ましい書き方です。

as — 別名を付ける

長いモジュール名には別名を付けるのが慣例です。pandas や NumPy では業界全体で略名が決まっています。

import pandas as pd
import numpy as np
import datetime as dt
df = pd.DataFrame({"C": [2900, 2925]})
arr = np.array([1, 2, 3])
today = dt.date.today()

pd / np のような略名は事実上の標準なので、独自の略名は付けないほうがコードが読みやすくなります。

サードパーティのモジュール

サードパーティのモジュールは、自分の環境にインストールしたうえで読み込みます。

Terminal window
pip install requests
import requests
response = requests.get("https://example.com")
print(response.status_code) # 200

仮想環境(venv)とインストール手順は#2-3「venv で仮想環境を作る」 / #3-12「pip と requirements.txt とパッケージ管理」 で扱います。

標準ライブラリで覚えておくと便利なもの

株価分析を始めるにあたって、よく使う標準モジュールを挙げておきます。

モジュール主な用途
math数学関数(sqrt / log など)
statistics平均・分散などの基本統計
datetime日付・時刻の処理(#3-9「日付と時刻 (datetime)」)
jsonJSON の読み書き(#3-7「ファイルの読み書き(CSV / JSON)」)
csvCSV の読み書き(#3-7「ファイルの読み書き(CSV / JSON)」)
pathlibファイルパスの操作
os / sys環境変数・実行環境

「サードパーティを入れる前に、標準ライブラリで足りないか確認する」のが基本姿勢になります。

自作モジュールを作る

同じディレクトリに 2 つの .py ファイルを置きます。

analysis.py
def average(values: list[float]) -> float:
return sum(values) / len(values)
def daily_returns(prices: list[float]) -> list[float]:
return [
(curr - prev) / prev
for prev, curr in zip(prices[:-1], prices[1:])
]
main.py
from analysis import average, daily_returns
prices = [100, 102, 101, 103, 105]
print(average(prices)) # 102.2
print(daily_returns(prices)) # [0.02, -0.0098..., ...]

main.py から python main.py で実行すると、analysis.py の関数が使えます。

パッケージ — モジュールをディレクトリにまとめる

複数のモジュールをディレクトリにまとめたものをパッケージと呼びます。Python 3.3 以降は空の __init__.py も不要です(あっても問題ありません)。

project/
main.py
analysis/
metrics.py
returns.py
main.py
from analysis.metrics import average
from analysis.returns import daily_returns

ディレクトリの階層がそのままモジュールパスになります。プロジェクトが大きくなったらこの形に整理します。

name == “main” のイディオム

モジュールが「直接実行されたとき」と「import されたとき」で挙動を変える定石があります。

analysis.py
def average(values: list[float]) -> float:
return sum(values) / len(values)
if __name__ == "__main__":
# python analysis.py で直接実行されたときだけ動く
print(average([100, 102, 101]))

python analysis.py だと __name__"__main__" になり、from analysis import average だと "analysis" になります。動作確認用のコードを書く場所として便利です。

import の探索順

import は次の順で探索します。

  1. 組み込みモジュール(sys など、Python に内蔵されたもの)
  2. sys.path のディレクトリ(現在の実行ディレクトリ・サイトパッケージ・PYTHONPATH など)

自作モジュールが見つからないときは、実行ディレクトリと自作ファイルの場所を確認します。

import sys
print(sys.path)

生成AI へのプロンプト例

モジュール構成を相談する例です。

Python 3.12 で、J-Quants API から株価を取得して
日次リターンを計算するプロジェクトを作りたいです。
責務をモジュールに分けるとしたら、どのような構成が
適切でしょうか。各モジュールの役割と公開する関数も
合わせて提案してください。
制約:
- pandas / requests のみ使用
- 標準ライブラリ以外は最小に

責務分割の意図が共有できると、後の実装でブレが少なくなります(#7-2「データ分析のためのプロンプト設計」)。

まとめ

  • モジュールは標準ライブラリ・サードパーティ・自作の 3 種類
  • import モジュール名from モジュール名 import 名前 で読み込む
  • pandas / NumPy などには事実上の標準の略名がある
  • 大きくなったらディレクトリにまとめてパッケージにする