Python : モジュールの使い方(import、as、パッケージ など)

TwitterFacebookHatena
  • 公開:2021-10-18
  • 更新:2024-10-15
  • 文章量:2240
  • Python

TL;DR

Python のクラスや関数などのコードを書いた .py という拡張子のファイルはモジュールと呼ばれ、モジュールをまとめたものをパッケージと呼ぶ。再利用したり、保守性を高めるために利用するとよい。パッケージの中身は、モジュールやサブパッケージが集約されている。

モジュールのポイント

モジュール

  • クラスや関数をコードをまとめたファイル
  • import module として使う
  • 自作のモジュールを作ることができる
  • from 節を使うと、モジュールから特定の属性のみをインポートできる
  • カンマ区切り(,)で、複数の属性をインポートできる
  • ドット区切り(.)で、サブパッケージを指定できる
  • ワイルドカード(*)で、複数の属性を一括インポートできる

パッケージ

  • .py ファイルを格納するサブディレクトリ
  • 複数のモジュールをまとめる
  • 目印として__init__.pyを配置する

__init__.pyは、目印の他にパッケージの初期化をする機能がある。パッケージがインポートされると、最初に実行される。

名前空間

  • 「名前」が衝突しないように、使用する名前の空間を分けること

6. モジュール (module) — Python 3.6.13 ドキュメント

モジュールのインポート

モジュールのインポートは以下のように記述する。

import モジュール名

モジュールの中の関数を使うには以下のように記述する。

モジュール名.モジュール内の関数名

モジュールの使い方

それでは実際に作ってみよう。同じディレクトリに、読み込み元の foo.py ファイル、インポート先の hello.py ファイルを作ってみる。

foo.py というファイルには、リストの要素をランダムで抽出するモジュールを読み込ませる。

from random import choice
lang = ['Python', 'Go', 'Rust']
def func():
    return choice(lang)

hello.py というファイルを作り、foo.py ファイルをインポートするコードを記述する。

import foo

lang = foo.func()
print(lang)

その結果、読み込み元のファイルが実行され結果が返される。

dir()メソッドを使って確認すると、foo.py モジュールのトップレベルのオブジェクトを確認することができる。

# hello.py

import foo

lang = foo.func()
print(dir(foo))

# [...'choice'...]

as

長過ぎるモジュール名を短縮したり、どこかに同じファイルが存在するなどの理由で、別名で呼び出したい時は、モジュール名のあとに as をつけ、新たに名前をつけるとよい。

import foo as f

lang = f.func()
print(lang)

モジュールの名前

モジュールをインポートするとその__name__属性にモジュールの名前が文字列として格納される。<モジュール名>.__name__で取得できる。

import math

print(math.__name__)

# math

数学の機能をまとめた math というモジュールを使う場合。

import math
print(math.pi) # πの値

関数を、そのままの名前で書くとこうなる。

from モジュール名 import モジュール内の関数名
from math import pi
print(pi) # πの値

複数のモジュールをインポートする場合は、関数名をカンマ区切りする。

モジュールをスクリプトとして実行

このイディオムは、モジュールをスクリプトとして利用したい場合に使う。

「コマンドラインからスクリプトとして直接実行したときに、以降の処理を行う」という意味を持つ。

if __name__ == "__main__":

参考 : スクリプトとして直接実行したときのみ処理を行う記述

if 文の左辺に記述されている、特殊変数__name__ は、Python ごとに、そのファイル名が格納される。

if 文の右辺に記述されている、特殊変数__main__ は、Python コマンドから直接実行されたときに、この名前が格納される。

Python のスクリプトは、インポートしただけでファイルに記述した処理が実行されてしまう。しかし、自動実行が困るケースもある。できることなら、インポートされたときは自動実行をさせず、スクリプトとして直接実行したときだけ処理を行いたい。

そんなときに、この if 文で判定すると スクリプトとして直接実行したときのみ処理を行う ことができる。

Python のコードは、コマンドから直接実行されるか、他のプログラムをインポートして呼ばれる。その判定を行うことができる。インポート元のファイルの末尾に以下を加えることで、スクリプトとしても使えるようになる。

読込先のファイル

import インポート元
print('処理')

インポート元のファイル

def main()
    print('処理')

if __name__ == "__main__":
    main()

Python : モジュールの使い方(import、as、パッケージ など)