Python

【Python 10】モジュール

環境

macOS Big Sur
Python3.8

モジュール

関数やクラス等の機能をまとめたスクリプトファイルを「モジュール」と言います。「モジュール名.py」として保存することで作成できます。形上は通常のスクリプトファイルと変わりません。

モジュール名のルール。

  1. 数字からは始めない。
  2. アルファベットの小文字のみを使用する。
  3. ドットは含めない。

モジュールは必要なときに読み込む(インポートする)ことで、適宜使用することができます。以下のようにfunc1関数とfunc2関数を定義したmodule1モジュールを例にインポート方法を説明します。

# ファイル名:module1.py
def func1(a, b):
    return a + b


def func2(c, d):
    return c * d

 

モジュールのインポート

「import文」を使用することで、モジュールを読み込むことができます。

また、「モジュール名.関数名()」でモジュール内の関数を呼び出すことができます。(クラスを呼び出す場合も同様です。なお、モジュール内で変数が定義されている場合、読み込み後に「モジュール名.変数名」で読み書きすることもできます。)

モジュールのインポート

import モジュール名

関数の呼び出し

モジュール名.関数名()

import module1

print(module1.func1(1, 2))
print(module1.func2(3, 4))


# 実行結果
3
12

 

仮に、module1モジュール内で「func3関数を持つmodule2モジュール」をインポートしている場合、「module1.module2.func3()」と記述することで、モジュール内でインポートしている別のモジュールの関数を呼び出すこともできます。

なお、インポートすると、スクリプトファイルは実行もされます。例えば、print('Hello')の単純文があれば「Hello」と出力されます。

インポートの際には実行せず、直接ファイルを実行した場合にのみ実行させたい命令は、以下のようなif文のブロックに記述します。

# ファイル名:module1.py
if __name__ == '__main__':
    print('Hello')


def func1(a, b):
    return a + b


def func2(c, d):
    return c * d


# インポート時には実行されません。
import module1


# 直接ファイルを実行するとprint()関数が実行されます。
% python3 module1.py
Hello

 

「__name__」「特殊変数」と言い、プログラム実行時に自動的に定義される変数です。モジュールがインポートされた場合、「__name__」には「モジュール名」が代入され、直接実行された場合は文字列「__main__」が代入されます。

モジュールの名称を変更してインポート

「as」を使用することで、モジュール名を変更してインポートすることができます。関数を呼び出す際も、変更後のモジュール名を使用して呼び出します。

モジュールのインポート

import モジュール名 as 変更後の名称

関数の呼び出し

変更後の名称.関数名()

# module1をmodとして読み込む。
import module1 as mod

print(mod.func1(1, 2))
print(mod.func2(3, 4))


# 実行結果
3
12

 

モジュール内の特定の関数等のみをインポート

「from」を使用することで、モジュール内の特定の関数等のみをインポートすることができます。

モジュールのインポート

from モジュール名 import 関数名等

※asを使用して関数名等を変更してインポートすることもできます。

ドットによる関数のインポートはできません。import module1.func1はエラーになります。

import単体ではモジュールしかインポートできません。なお、モジュール内のモジュールをインポートする場合は、ドットを使用することができます。(例:import module1.module2)

# module1のfunc1関数のみインポート。
from module1 import func1

print(func1(1, 2))


# 実行結果
3

 

パッケージ

複数のモジュールをまとめて「パッケージ」として管理することができます。パッケージの実態はディレクトリですが、ディレクトリ内に「__init__.py」モジュールを作成する必要があります。

「__init__.py」モジュールは空の状態でも大丈夫ですが、パッケージをインポートした際には、「__init__.py」モジュールが実行されるため、初期化プログラムを書いておくことも可能です。

パッケージのインポート

パッケージをインポートする際は、モジュールまで指定する必要があります。

通常のモジュールのインポートと同様に、importでドットを使用してモジュールまで指定、fromと組み合わせることで特定のモジュールや関数等の呼び出し、asを使用することでモジュールや関数等を別名で読み込むことができます。

# インポート。
import package.module1

# 関数の呼び出し。
package.module1.func1()


# fromを使用したインポート。
from package import module1

# 関数の呼び出し。
module1.func1()


# fromを使用したインポート。
from package.module1 import func1

# 関数の呼び出し。
func1()


# asを使用した別名でのインポート。
import package.module1 as mod

# 関数の呼び出し
mod.func1()


# asを使用した別名でのインポート。
from package import module1 as mod

# 関数の呼び出し。
mod.func1()


# asを使用した別名でのインポート。
from package.module1 import func1 as f

# 関数の呼び出し。
f()

 

標準ライブラリ

Pythonには、あらかじめ搭載されているパッケージやモジュールが多数あります。これらを「標準ライブラリ」といいます。(関数やモジュール、パッケージ等をまとめたものを「ライブラリ」といいます。)

標準ライブラリについては、公式ドキュメントを参照してください。

また、こちらのページでモジュール検索もできます。

外部ライブラリ、pipコマンド

標準ライブラリ以外に公開されてるサードパーティー製のライブラリ(「外部ライブラリ」)を利用することも可能です。

外部ライブラリは「PyPI」(サイトはこちら。)で公開されています。

PyPIに登録されている外部ライブラリをインストールするには、ターミナルに以下のように入力します。

% pip3 install <ライブラリ名>

# ライブラリ名の後ろに「==」と「<バージョン名>」を付けると、指定のバージョンのライブラリをインストールできる。
# (例)pip3 install requests==2.31.0
% pip3 install <ライブラリ名>==<バージョン名>

# 外部パッケージをアンインストールする。
% pip3 uninstall <ライブラリ名>

 

また、既にインストールしている外部ライブラリをアップデートするには、ターミナルに以下のように入力します。

% pip3 install --upgrade <ライブラリ名>

 

ライブラリの情報を出力・利用する場合は、以下のコマンドを使用します。

# ライブラリの情報を表示。
% pip3 show <ライブラリ名>

# インストールした全てのパッケージを表示する。
% pip3 list

# インストールしたパッケージを「pip install」向けの形式で表示する。
% pip3 freeze

# 「pip3 freeze」の結果は「requirements.txt」に保存するのが一般的。
% pip3 freeze > requirements.txt

# 「requirements.txt」のリストの全ライブラリをインストールする。
% pip3 install -r requirements.txt