ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

Python - モジュールとパッケージ

初めに

 本記事では、モジュールとパッケージについて、解説します。モジュールとパッケージの違いやインポートの仕方、パッケージの作り方、__init__.pyについて説明しています。

モジュールとパッケージ

モジュール

 モジュールとは関数やクラスなどを別ファイルで利用できる状態で整理したPythonソースコードです。

 外部ファイルのソースコードを使用するには、importを使います。

# math モジュールをインポート
import math

# math.pi を使って円周率を出力
print(math.pi)

# math.sin 関数を使って三角関数の値を出力
print(math.sin(math.pi / 2))

 上記のコードではmathという外部ファイルをインポートしています。インポートした外部ファイルに記述してある変数や関数を使用することができます。

 また、from モジュール名 import 関数名を使い、外部ファイルの特定の関数だけインポートすることができます。

パッケージ

 1つのモジュールにたくさんの定義を含めてしまうと分かりづらくなってしまうため、ファイルを分割し、複数の無ジュールを作成し、1つのディレクトリに集約します。このように複数のモジュールをまとめたディレクトリをパッケージといいます。

モジュールとパッケージの関係

 Pythonにおいて、ファイルをモジュール、ディレクトリをパッケージと呼んでいると解釈できます。

パッケージの作り方

 ディレクトリ内にPythonファイルをまとめただけではパッケージにはなりません。ディレクトリをパッケージとして扱うには、__init__.pyというファイルをディレクトリ内に用意する必要があります。

 __init__.pyは空ファイルとするときは、パッケージ内のモジュールを次のようにインポートします。

import パッケージ名.モジュール名
モジュール・パッケージ命名時の注意点

 モジュール名、パッケージ名に-を使わないようにしましょう。xx-yyのようなモジュールを作った、インポートするにはimport xx-yyと記述することになりますが、-が引き算だと解釈されてしまいます。

__init__.py

 先ほど、パッケージには__init__.pyというファイルを作成する必要があることを確認しました。このファイルの役割を確認します。

 __init__.pyはモジュール、パッケージの初期化を行います。すなわち、パッケージを参照する場合、最初に呼び出されるものが__init__.pyです。

 先ほど、パッケージ内のモジュールを参照する場合はimport パッケージ名.モジュール名と記述すると述べましが、パッケージを参照する方法は述べませんでした。これは、__init__.pyが空のファイルの状態だとパッケージを参照しても何もインポートできないためです。

 例えば、次のようなパッケージを参照したい場合について考えます。

パッケージ名 example
モジュール sample.py

 このexampleパッケージ自体を参照し、sampleモジュールを使用したい場合は、__init__.pyに次のように記述します。

# __init__.py

# 自分と同じディレクトリから sample.py をインポート
from . import sample

 from . import sampleは相対インポートを行っており、自分と同じディレクトリ内にあるモジュールからsampleをインポートしています。同様にパッケージ内にあるモジュールをすべて同様に記述すれば、あとはパッケージをインポートするだけで使用できるようになります。