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
という名前で保存して、次のステップに進みます。
この記事もチェック:Pythonのpyfigletモジュールを使ってASCIIアートを作成する方法
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つの関数だけが必要でした。
モジュール全体をインポートする必要はないでしょう。
この場合、 from
と import
を一緒に使うことができます。
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 “というモジュールを置いてみましょう。
この例では、モジュール名を “modules.adder” から “adder” に as を使ってリネームしています。
その理由は、名前を変えないと、モジュールから関数を呼び出す必要があるたびに “modules.adder.add(5,10)” などと指定しなければならないからです。
import` ステートメントでモジュールの名前を変更する必要はありません。
また、プログラムの後半でモジュールの名前を保持する変数を作成し、その変数を使ってモジュール内の関数を呼び出すことができます。
adder = modules.adder` とします。
これもうまくいきますが、プログラムの最初に新しい名前を宣言することで、コードの可読性が向上し、次にあなたのコードに取り組むプログラマが楽になります。
もう一つの方法は、from..importを使うことです。
これにより、プログラム内で使用するモジュールの名前を変更する手間が省けます。
私のimportコマンドに必要な唯一の変更は、from modules import adderを使うことです。
この記事もチェック:Pythonのpytzモジュールを使ってタイムゾーンを変更する方法
2. sys.pathにパスを追加する
モジュールをインポートするとき、Pythonはまず定義済みのパスを調べて、名前にマッチするモジュールを探します。
最初に調べるディレクトリはカレントディレクトリで、その後に他のリストされたディレクトリに移動します。
sys.pathを出力して、Pythonがどのようなパスを調べているかを見てみましょう。
上記の出力はLinuxコンピュータで生成されたものです。
Windowsコンピュータを使用している場合は、異なるパスのリストが表示されます。
sys.pathはPythonのリストなので、これにパスを追記することができます。
sysモジュールをインポートして、”modules “ディレクトリに追記しました。
ですから、このプログラムの中でmodulesディレクトリにあるモジュールをインポートする必要があるときはいつでも、その名前を指定するだけで作業を開始できるはずです。
3. モジュールをシステムワイドで利用可能にする
上記の例では、sys.pathを出力しました。
Pythonはあなたのコードがどこに置かれているかに関わらず、デフォルトでこれらのディレクトリを探すことが分かっています。
もし私たちのモジュールをこれらのディレクトリの1つに移動すれば、将来あなたのコンピュータで作るどのプログラムからも、簡単にモジュールにアクセスできるようになります。
プログラムを別のシステムに移植する場合、モジュールも一緒にコピーする必要があることに注意してください。
ですから、プログラム固有のモジュールについては、親ディレクトリの中のフォルダに整理し、そこからインポートするのが一番です。
まとめ
これで、Pythonでカスタムモジュールを作成し、複数ファイルのプログラムを書けるようになったはずです。
クラスを使って複数のファイルにコードを整理することは、コードの再利用性においてはるかに良い選択肢であることを忘れないでください。
今必要な関数の多くは、将来のアプリケーションでも役に立つかもしれませんし、作成した個々のモジュールはインポートするだけで済むので、高度なアプリケーションの場合は何時間もかかる作業を省くことができます。