・Pythonでweb開発を行いたい方
・モジュールとパッケージについて説明できない方(勉強している方)
など
Pythonにはモジュールとパッケージというものがあります。
同じような系統の話をすると、他にもライブラリとかもあったります。
皆さんは、これらの違いを説明できますでしょうか??
(私はできませんでした)
正直Pythonはモジュールやらパッケージやらを理解していなくても全然使える言語ではあります。
Numpyの公式ページからコードをコピペすれば大半の計算はできますし、matplotlibを使えばグラフを描くことができます。
しかし仕事や学業の効率化、webアプリ開発などを考えている方にとってはモジュール・パッケージの理解が大切になってきます。
この記事ではPythonのモジュールとパッケージについて解説していきたいと思います。
モジュール/パッケージとは
私のような製造業の人間にとっては、モジュールは電池やモーターのような、ある機能をもった交換可能な部品集合体のイメージでしたが、Pythonにおいてはクラスや関数をまとめたファイルのことを指すようです。(むしろこっちが元?)
さらにモジュールを複数集めてまとめたものがパッケージだそうです。
パッケージは、複数のモジュールをまとめたものです。
ちなみに、このパッケージやモジュールをまとめたものがライブラリになります。
図で表すとこんな感じです。
実際にパッケージを作ってみる
今回は下図のようなディレクトリ構成の例で解説したいと思います。
かなりシンプルなものにしてます。
メインで実行するpythonファイル(main.py)とパッケージが入ったフォルダ(test_pack)、
さらにフォルダの中に3つのpythonファイルが入っております、
パッケージの中身
__int__.pyについて
もしかするとこの__int__.pyが1番初心者にとっては難しい内容かもしれませんが
このファイルは空のファイルで、何も中身が書いていないpythonファイルです。
このファイルの存在意義をPython公式ページから引用すると
The
__init__.py
files are required to make Python treat directories containing the file as packages. This prevents directories with a common name, such asstring
, from unintentionally hiding valid modules that occur later on the module search path. In the simplest case,__init__.py
can just be an empty file, but it can also execute initialization code for the package or set the__all__
variable, described later.=以下翻訳=
https://docs.python.org/ja/3/tutorial/modules.html?highlight=import
__init__.py ファイルは、Python がファイルを含むディレクトリをパッケージとして扱うようにするために必要です。これにより、文字列などの一般的な名前を持つディレクトリが、モジュール検索パスで後で発生する有効なモジュールを意図せずに非表示にすることを防ぎます。最も単純なケースでは、__init__.py は単なる空のファイルですが、パッケージの初期化コードを実行したり、後で説明する __all__ 変数を設定したりすることもできます。
と書いてあります。
とりあえず1番大切なことは__int__.pyはそのディレクトリがパッケージだと明示することです。
これはPCの動作的にも、他の人がフォルダを見ても分かるようにするところだと思います。
greeting.pyとfood.py
この中身はそんなに重要じゃないのですが、
以下のようなファイルを用意しました。
まずこちらがgreeting.py
def english():
print('hello')
def japanese():
print('こんにちは')
english関数とjapanese関数を用意して
呼び出されると、それぞれ英語と日本語で挨拶としてpirntしてくれる関数。
そしてfood.py
def america():
print('hamberger')
def japan():
print('寿司')
こちらもamerica関数、とjapan関数を用意して
呼び出されると、その国の食べ物をprintしてくれる関数。
ちょっと関数の作り方のセンスが無い感じの管理人で申し訳ございません。
実行するPythonファイル
main.pyの中身は、以下のように書くとパッケージの中のモジュールを実行できます。
from test_pack import greeting
from test_pack import food
def main():
greeting.english()
greeting.japanese()
print("-----")
food.america()
food.japan()
if __name__ == "__main__":
main()
### 下記の内容が出力されます###
# hello
# こんにちは
# -----
# hamberger
# 寿司
自作のパッケージのモジュールをimportするためには
「from test_pack import greeting」でができるようになります。
このブログを見つけてくださった方ならば、もっと調べて
asで省略する方法や、*(アスタリスク)で書く方法も勉強されると思いますが
form パッケージ import モジュール
で書いてくれると
分かりやすくて助かっております。
form パッケージ import モジュール
が分かりやすいです!(2回目)
おわりに
ここまで読んでいただき、ありがとうございました。
皆様新年度が始まりましたが、いかがお過ごしですか??
私は出張が続いたり、一気に気温が上がったりで
少し体調を崩しておりました。(年齢を感じてしまう。。。)
結構昔から頭痛持ちだったのですが、最近は生活に支障がでるレベルだったので
頭痛外来にいって、MRIまで撮ったのですが、、、、
特になにもなかったです(笑)
偏頭痛の予防薬と発生した時の痛み止めをもらって、無事かなり効いております。
また来週から新入社員への教育があったりと色々多忙になりますが頑張ります。