#17 Pythonで学ぶモジュールとパッケージの基本
プログラムが大きくなると、1つのファイルに全てを書くのではなく、複数のファイルに分けて整理したくなります。この記事では、Pythonにおけるモジュールとパッケージの基本と、実務での使い方を解説します。
モジュールとは
Pythonでは、1つの.pyファイルがそのまま「モジュール」として扱われます。別のファイルの機能を使いたいときはimportを使います。
# utils.py
def greet(name):
print(f"こんにちは、{name}さん")
# main.py
import utils
utils.greet("太郎")
特定の機能だけを読み込む
from utils import greet
greet("太郎")
長い名前のモジュールに別名を付けたい場合はasが使えます。データ分析でよく見るimport pandas as pdもこの書き方です。
import utils as u
u.greet("太郎")
パッケージという考え方
複数のモジュールをまとめたフォルダを「パッケージ」と呼びます。フォルダの中に__init__.pyという特別なファイルを置くことで、そのフォルダがパッケージとして認識されます。
myapp/
__init__.py
utils.py
models.py
from myapp import utils
from myapp.models import User
比較的新しいPythonでは__init__.pyが無くてもパッケージとして扱える場合がありますが、明示的に置いておくと意図が伝わりやすく、初期化処理を書く場所としても使えます。
if __name__ == "__main__": という決まり文句
Pythonのファイルでよく見かけるif __name__ == "__main__":は、「このファイルが直接実行されたときだけ、このブロックを実行する」という意味です。
# utils.py
def greet(name):
print(f"こんにちは、{name}さん")
if __name__ == "__main__":
greet("テスト太郎")
これを書いておくと、python utils.pyのように直接実行したときはgreet("テスト太郎")が動きますが、import utilsとして別のファイルから読み込んだ場合はこの部分が実行されません。動作確認用のコードと、モジュールとして提供する機能を分けたいときに使う定番の書き方です。
Pythonならではの注意点
import utilsのように名前だけを書いてモジュールを読み込む場合、Pythonがそのファイルを探せる場所(パス)にあるかどうかが重要です。「モジュールが見つかりません」というエラーが出たら、ファイルの場所や実行しているフォルダを確認しましょう。また、外部に公開する意図のないモジュール内の変数や関数には、名前の先頭にアンダースコアを付ける(_internal_helperのように)慣習があり、「これは内部利用専用です」という意図を伝える目印になります。
まとめ
Pythonのモジュールは.pyファイル単位で、importを使って読み込みます。asによる別名付けや、パッケージという仕組みで、より大きな単位に整理できます。
本ページはプロモーションを含みます。
参考書籍(PR)
Pythonをもっと学びたい方には「スッキリわかるPython入門 第2版」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿