Python3 – モジュールとパッケージ

概要

モジュールは共通して利用したい実行ファイルをインポートできるように配置したもの。パッケージはパッケージやモジュールをひとまとめにするもの。

  • ローカルの実行環境では、ディレクトリがパッケージになる
    • パッケージ内の__init__.pyファイルは特別なモジュールで、パッケージをインポートするだけでモジュール内の関数やクラスが使える
    • パッケージ下にモジュールファイルを置くと、[パッケージ名].[モジュール名]でモジュール内の関数やクラスが使える
  • パッケージのセットアップとインストール→今後

カレントディレクトリ下での使用

モジュールは普通のPython実行ファイルで作成。

たとえばカレントディレクトリに以下のようなファイルをtestmodule.pyとして置く。このモジュールには関数が1つとクラスが1つ定義されている。

そして同じカレントディレクトリにあるtest.pyを以下のように書く。

この時点でファイル構成は以下のようになっている。

ここでtest.pyを実行すると次のように表示される。無事インポートできて、モジュールで定義した関数、クラスとも使える。

実行後には新しいディレクトリが追加されて、以下のようになった。

カレントディレクトリ下でのモジュール管理のまとめ

  • 関数・クラスなどを含むモジュールをPythonファイルとして作成し、カレントファイルに置く
  • 利用側で、モジュール名(モジュールのファイル名から拡張子”.py”を除いた名前)を指定してインポート
  • [モジュール名].[関数名/クラス名]として利用

サブディレクトリ管理でのエラー

モジュールをカレントディレクトリではなくサブディレクトリに置いて管理したいので、以下のように置いてみる。

そして以下のように呼び出そうとしたが残念ながらエラー。

ただしこの実行後、サブディレクトリの下に新しいディレクトリがつくられていた。

これはimport文を読んだPythonがsubdirというパッケージを探しに行ったが見つからなかったためで、モジュールを置いたディレクトリをパッケージとしてPythonに認識させる必要がある。

パッケージ

パッケージ直下のモジュール

ディレクトリをパッケージとしてPythonに認識させるためには__init__.pyというファイルが必要になる。

たとえば以下のようなディレクトリ・ファイル構造として

__init__.pyファイル内容を前のtestmodule.pyと同じとする。

カレントディレクトリ下のtest.pyでは前は[モジュール名].[関数/クラス]としていたが、今回は以下のようにパッケージから呼び出すように変更。__init__.pyファイルに書いたモジュールは、パッケージ直下から呼び出される。

出力は以下の通りとなって成功。

またここでもmypackageディレクトリの下に新しいディレクトリが作成された。

パッケージ内のモジュール

testpackageディレクトリ下にothermodule.pyファイルを置く。

test.pyを以下のようにして実行。

以下のように実行される。

一度実行されると、pycacheディレクトリに新たなファイルが追加される。

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です