Pythonのモジュールとパッケージ
こんにちは、切口太郎です。
Pythonでのモジュールとパッケージについて簡単にまとめます。
モジュールもパッケージも一般的に利用される言葉なので、感じは何となく分かる気がしますが、Python ではどのように定義されているのでしょう?
1 モジュール
python には、大きく 3種類のモジュールがあります。
① 組み込みモジュール
python インタープリターに組み込まれているモジュールです。
このモジュールは、pyton インタープリターを起動しただけで、import 文なしで利用できます。
リスト、タプル、辞書、集合などは組み込みモジュールです。
内部モジュールという呼び方をする人もいます。
② 一般モジュール
python でコーディングされた外部モジュールです。
外部モジュールは、import 文で明示的に呼び出す必要があります。
python の標準ライブラリーや外部ライブラリー、フレームワークなど大部分がこの形式のモジュールです。
③ 拡張モジュール
Python インタープリターは、C言語で作成されています。
拡張モジュールは、主にC言語で作成された外部モジュールで、インタープリターから直接呼び出す事ができるようになっています。
高速性が求められる機能は、拡張モジュールで提供されています。
ただ、拡張モジュールはそれを呼び出すための 一般モジュールと一緒に提供されているので、python から呼び出して使うことができます。
numpy など数値計算用のモジュールや、Pillow などの画像処理用のモジュールは拡張モジュールで提供されています。
Python のプログラミングは、一般モジュールを作っていくことになります。
一般モジュールとは、ソースファイル単位のプログラムです。
sample_network.py という Python プログラムを作成すると、sample_network というモジュールとして利用できるようになります。
なんかわかりにくいですね。
簡略図でまとめました。
Python Native Library は、大部分がC言語で作成されていて、CPUが直接理解できる「マシン語」になっています。
この部分は、OSの機能を直接利用して、Python のプログラムを実行しています。
Python Interpreter は、インタープリターで Python のプログラムを翻訳して、組み込みモジュールまたは、Native Library を呼び出して実行します。
ちょっと細かすぎてわかりにくいかも知れませんね。
組み込みモジュールは、Python の内部の機能として、存在していています。
拡張モジュールは、Native Library を拡張しています。
この2つは、処理速度がとても速く実行できます。
一般モジュールは、Python で作成されていて、インタープリターで翻訳が必要なので、処理速度が遅くなります。
2 パッケージ
パッケージとは、ディレクトリーでソースファイルをフォルダー(ディレクトリー)単位に整理したものです。 フォルダーに __init__.py ファイル(中身は空でもOK!)を置くことによって、python では、パッケージとして利用できます。
ソースファイルには、機能ごとにまとまった単位でプログラムを書いていきます。機能が多い時には、複数のファイルにプログラムを分割して作成します。
分割したファイルが多くなった場合にファイルを探すのが難しくなるので、もう少し機能を分類して細分化しますが、この時にフォルダーを分けてソースファイルを管理するほうが、管理が簡単になります。
細分化したフォルダーを Python でパッケージ化すると、利用する側の負担が楽になります。
わかりにくいですね。
図を利用して順にお話していきます。
① 始めは、1つのソースファイルにプログラムを記述していきます。
② プログラムが大きくなって分割したり、別の機能を別のソースファイルにプログラムを記述していきます。
③ フォルダー(pyprog) にソースファイルが多くなってきて管理が難しくなったので、細分化してフォルダーを分割します。
④ それぞれのフォルダーに __init__.py を作成して、パッケージとしてモジュールにアクセスできるようにします。
Python の一般モジュールは、ソースファイル=モジュールなので、プログラムが大きくなってソースファイルが増えると、フォルダーを使ってソースファイルを分けて管理していきます。
実務でプログラムを作成するときには、Python のエキスパート達が、実務設計書を参照にして、どのようなモジュールを作成して、どのようなパッケージにしていくか、コーディングの前に事前に設計します。
企業業務や課題を Python で実現するための、グランドデザインを作ります。
このグランドデザインを見ながら、何人かで分担してコーディングをしていきます。
このグランドデザインが「よくできている」と、プログラミングがしやすくなるし、全員のプログラムを集めた時の矛盾が少ないので、スムーズに開発が進みます。
Python のパッケージの機能は、結構簡単に実現できますが、かなり重要な機能の1つです。
コメント
コメントを投稿