Pythonでのモジュールの作り方やインポートの方法などを解説する

スポンサーリンク

Pythonの学習を始めてから、かなりの時間が経過しているんですね。

初心者のうちは、クラスや関数を使用してすべてのコードを整理した1ファイルのプログラムを持つのが一般的です。

しかし、上級者になり、コードがより複雑になると、複数のファイルを使用することを学ぶ必要があります。

スポンサーリンク

Python モジュールとは何ですか?

Pythonモジュールは、アプリケーションに含めたいクラス、メソッド、または変数を含むPythonファイルです。

高度なPythonアプリケーションでよく見られるのは、再利用可能な関数やクラスがファイルにまとめられ、プログラムの他の部分でインポートされるというやり方です。

name = "Python"
def add(num1, num2):
        return num1 + num2

これはPythonモジュールと呼ばれます。

このモジュールをインポートすることで、変数や関数を毎回宣言したり作成したりすることなく、何度も再利用することができます

(トック

How to Create Python Module?

シンプルですが、理解し、実際の場面で応用できるように、小分けにして説明します。

1. メソッドを含むファイルの作成

まず、パラメータとして受け取る2つの数値を加算する基本的なメソッドを作成します。

import adder
nums = adder.add(5, 10)
print(nums)

これが私たちのモジュールです。

上のコードは、渡された2つの数値の合計を返すメソッドです。

上のコードを adder.py という名前で保存して、次のステップに進みます。

2. モジュールをインポートするためのメインファイルの作成

次のステップは、カスタム Python モジュールをプログラムにインポートすることです。

さて、これは他のモジュールをインポートするのと全く同じです。

唯一の違いは、モジュールファイルがシステムパスの中にあるのではなく、ローカルにあることです。

from adder import add
 
nums = add(5, 10)
print(nums)
import adder
 
nums = adder.add(5, 10)
print(nums)
 
print(adder.name)

上の例では、”adder” ファイルをインポートしています。

インポート中に “.py” 拡張子を追加する必要はありません。

3. 1つの関数だけをインポートする

モジュール内に、複数のタスクを実行する複数の関数があったとします。

しかし、そのモジュールをインポートするプログラムでは、そのうちの1つの関数だけが必要でした。


モジュール全体をインポートする必要はないでしょう。

この場合、 fromimport を一緒に使うことができます。

import modules.adder as adder
 
nums = adder.add(5, 10)
print(nums)
 
print(adder.name)
from modules import adder
 
nums = adder.add(5, 10)
print(nums)
 
print(adder.name)

このように、特定の関数をインポートしているので、Pythonはモジュール名で参照することなく、あたかもその関数がファイルにネイティブであるかのように使用することを可能にしています。

4. モジュールの変数を使用する

私たちのモジュールにある2つの変数に気づいたかもしれません。

これは、変数がその値をそのままにモジュールから直接インポートできることを示すために追加しました。

import sys
print(sys.path)
import sys
sys.path.append("modules")
import adder
 
nums = adder.add(5, 10)
print(nums)
 
print(adder.name)

別のディレクトリからモジュールをインポートする


モジュールをメインファイルと同じフォルダーに格納する必要はありません。

ファイルがたくさんある場合、それは非常に不便になります。

また、別のプログラムにモジュールをインポートする場合にも、そのモジュールを使用することが難しくなります。

その代わり、モジュールをフォルダで整理して、今までと同じようにインポートすることができます

インポート文に少し変更を加えるだけで、あとはすべて問題なく実行できるのです。

ルートディレクトリにないモジュールをプログラムにインポートするには、複数の方法があります。

まずは簡単なものから。

1. フォルダ名を指定してのインポート

先ほどのドット表記やfrom..importは、ディレクトリ内にあるモジュールをインポートするために使用することができます

ここでは、modulesというディレクトリに “adder.py “というモジュールを置いてみましょう。

Python Module Example 1
Python Module Example 1
Import Module Basics
This is the output that we’ll receive when the above program is run

この例では、モジュール名を “modules.adder” から “adder” に as を使ってリネームしています。

その理由は、名前を変えないと、モジュールから関数を呼び出す必要があるたびに “modules.adder.add(5,10)” などと指定しなければならないからです。


import` ステートメントでモジュールの名前を変更する必要はありません。

また、プログラムの後半でモジュールの名前を保持する変数を作成し、その変数を使ってモジュール内の関数を呼び出すことができます。

adder = modules.adder` とします。

これもうまくいきますが、プログラムの最初に新しい名前を宣言することで、コードの可読性が向上し、次にあなたのコードに取り組むプログラマが楽になります。

もう一つの方法は、from..importを使うことです。

これにより、プログラム内で使用するモジュールの名前を変更する手間が省けます。


私のimportコマンドに必要な唯一の変更は、from modules import adderを使うことです。

Import Module Basics 1
Importing the function individually gives us the same output

2. sys.pathにパスを追加する

モジュールをインポートするとき、Pythonはまず定義済みのパスを調べて、名前にマッチするモジュールを探します。

最初に調べるディレクトリはカレントディレクトリで、その後に他のリストされたディレクトリに移動します。

sys.pathを出力して、Pythonがどのようなパスを調べているかを見てみましょう。

Module Import Variables
Importing variables from modules
Modules In Directory 1
Modules In Directory 1

上記の出力はLinuxコンピュータで生成されたものです。

Windowsコンピュータを使用している場合は、異なるパスのリストが表示されます。

sys.pathはPythonのリストなので、これにパスを追記することができます

Sys Path In Python Linux
Sys Path In Python Linux

sysモジュールをインポートして、”modules “ディレクトリに追記しました。

ですから、このプログラムの中でmodulesディレクトリにあるモジュールをインポートする必要があるときはいつでも、その名前を指定するだけで作業を開始できるはずです。

3. モジュールをシステムワイドで利用可能にする

上記の例では、sys.pathを出力しました。

Pythonはあなたのコードがどこに置かれているかに関わらず、デフォルトでこれらのディレクトリを探すことが分かっています。

もし私たちのモジュールをこれらのディレクトリの1つに移動すれば、将来あなたのコンピュータで作るどのプログラムからも、簡単にモジュールにアクセスできるようになります。

プログラムを別のシステムに移植する場合、モジュールも一緒にコピーする必要があることに注意してください。

ですから、プログラム固有のモジュールについては、親ディレクトリの中のフォルダに整理し、そこからインポートするのが一番です。

まとめ

これで、Pythonでカスタムモジュールを作成し、複数ファイルのプログラムを書けるようになったはずです。

クラスを使って複数のファイルにコードを整理することは、コードの再利用性においてはるかに良い選択肢であることを忘れないでください。


今必要な関数の多くは、将来のアプリケーションでも役に立つかもしれませんし、作成した個々のモジュールはインポートするだけで済むので、高度なアプリケーションの場合は何時間もかかる作業を省くことができます。

タイトルとURLをコピーしました