Python 3でモジュールを書く方法

前書き

Pythonmodulesは、Pythonコードで構成される.pyファイルです。 任意のPythonファイルをモジュールとして参照できます。

一部のモジュールはPython Standard Libraryから利用できるため、Pythonインストールでインストールされます。 その他は、Pythonのパッケージマネージャーpipinstalledにすることができます。 さらに、モジュールはPython.pyファイルで構成されているため、独自のPythonモジュールを作成できます。

このチュートリアルでは、他のプログラミングファイル内で使用するPythonモジュールを作成する方法を説明します。

モジュールの作成とインポート

モジュールの作成は、他のPythonファイルの作成と同じです。 モジュールには、他のPythonプログラムで利用できる関数、クラス、変数の定義を含めることができます。

Python 3のlocal programming environmentまたはserver-based programming environmentから、後で別のファイルにインポートするファイルhello.pyを作成することから始めましょう。

まず、Hello, World!を出力するcreate a functionを作成します。

hello.py

# Define a function
def world():
    print("Hello, World!")

python hello.pyを使用してコマンドラインでプログラムを実行すると、プログラムに何もするように指示していないため、何も起こりません。

作成したばかりのimport the moduleを使用できるように、main_program.pyという2番目のファイルin the same directoryを作成してから、関数を呼び出します。 このファイルは同じディレクトリに存在する必要があります。これにより、Pythonは組み込みモジュールではないため、モジュールの場所を認識できます。

main_program.py

# Import hello module
import hello


# Call function
hello.world()

私たちはimporting a moduleであるため、ドット表記でモジュール名を参照して関数を呼び出す必要があります。

代わりに、モジュールをfrom hello import worldとしてインポートし、関数をworld()として直接呼び出すことができます。 この方法の詳細については、how to using fromimport when importing modulesを参照してください。

これで、コマンドラインでプログラムを実行できます。

python main_program.py

実行すると、次の出力が表示されます。

OutputHello, World!

モジュールでvariablesを使用する方法を確認するために、hello.pyファイルに変数定義を追加しましょう。

hello.py

# Define a function
def world():
    print("Hello, World!")

# Define a variable
shark = "Sammy"

次に、main_program.pyファイル内のprint()関数で変数を呼び出します。

main_program.py

# Import hello module
import hello


# Call function
hello.world()

# Print variable
print(hello.shark)

プログラムを再度実行すると、次の出力が表示されます。

OutputHello, World!
Sammy

最後に、hello.pyファイルのdefine a classも入れましょう。 name属性とcolor属性を持つクラスOctopusと、呼び出されたときに属性を出力する関数を作成します。

hello.py

# Define a function
def world():
    print("Hello, World!")

# Define a variable
shark = "Sammy"


# Define a class
class Octopus:
    def __init__(self, name, color):
        self.color = color
        self.name = name

    def tell_me_about_the_octopus(self):
        print("This octopus is " + self.color + ".")
        print(self.name + " is the octopus's name.")

次に、main_program.pyファイルの最後にクラスを追加します。

main_program.py

# Import hello module
import hello


# Call function
hello.world()

# Print variable
print(hello.shark)

# Call class
jesse = hello.Octopus("Jesse", "orange")
jesse.tell_me_about_the_octopus()

hello.Octopus()を使用してOctopusクラスを呼び出すと、main_program.pyファイルの名前空間内のクラスの関数と属性にアクセスできます。 これにより、helloを呼び出さずに、最後の行にjesse.tell_me_about_the_octopus()を書き込むことができます。 たとえば、helloモジュールの名前を参照せずに、jesse.colorなどのクラスの属性の1つを呼び出すこともできます。

プログラムを実行すると、次の出力が表示されます。

OutputHello, World!
Sammy
This octopus is orange.
Jesse is the octopus's name.

モジュールは多くの場合定義ですが、コードを実装することもできることに注意してください。 これがどのように機能するかを確認するために、world()関数を実装するようにhello.pyファイルを書き直してみましょう。

hello.py

# Define a function
def world():
    print("Hello, World!")

# Call function within module
world()

ファイル内の他の定義も削除しました。

ここで、main_program.pyファイルで、importステートメントを除くすべての行を削除します。

main_program.py

# Import hello module
import hello

main_program.pyを実行すると、次の出力が返されます。

OutputHello, World!

これは、helloモジュールがworld()関数を実装し、それがmain_program.pyに渡され、main_program.pyの実行時に実行されるためです。

モジュールは、他のPythonプログラムファイルで利用できる定義またはコードで構成されるPythonプログラムファイルです。

別のディレクトリからモジュールにアクセスする

モジュールは複数のプログラミングプロジェクトに役立つ場合があります。その場合、特定のプロジェクトに関連付けられている特定のディレクトリにモジュールを保持することはあまり意味がありません。

メインプログラムがあるディレクトリとは別の場所からPythonモジュールを使用する場合は、いくつかのオプションがあります。

パスを追加する

1つのオプションは、そのモジュールを使用するプログラミングファイルを介してモジュールのパスを呼び出すことです。 これは、モジュールをシステム全体で使用可能にしないため、開発プロセス中に実行できる一時的なソリューションと見なす必要があります。

モジュールのパスを別のプログラミングファイルに追加するには、メインプログラムファイルで使用する他のモジュールと一緒にsysモジュールをインポートすることから始めます。

sysモジュールはPython標準ライブラリの一部であり、実装するモジュールのパスを設定するためにプログラムで使用できるシステム固有のパラメーターと関数を提供します。

たとえば、hello.pyファイルを移動し、main_program.pyファイルが別のディレクトリにあるときに、パス/usr/sammy/にあるとします。

main_program.pyファイルでは、sysモジュールをインポートし、Pythonがファイルをチェックするパスに/usr/sammy/を追加することで、helloモジュールをインポートできます。

main_program.py

import sys
sys.path.append('/usr/sammy/')

import hello
...

hello.pyファイルのパスを正しく設定している限り、エラーなしでmain_program.pyファイルを実行し、hello.pyがにあったときに上記と同じ出力を受け取ることができます。同じディレクトリ。

モジュールをPythonパスに追加する

2番目のオプションは、Pythonがモジュールとパッケージをチェックするパスにモジュールを追加することです。 これは、モジュールを環境全体またはシステム全体で使用できるようにする、より恒久的なソリューションであり、この方法をよりポータブルにします。

Pythonがチェックするパスを確認するには、プログラミング環境からPythonインタープリターを実行します。

python

次に、sysモジュールをインポートします。

import sys

次に、Pythonにシステムパスを出力させます。

print(sys.path)

ここでは、少なくとも1つのシステムパスを含む出力を受け取ります。 プログラミング環境にいる場合は、いくつか受け取ることがあります。 現在使用している環境にあるものを探す必要がありますが、メインシステムのPythonパスにモジュールを追加することもできます。 探しているものは次のようになります。

Output'/usr/sammy/my_env/lib/python3.5/site-packages'

これで、hello.pyファイルをそのディレクトリに移動できます。 それが完了したら、通常どおりhelloモジュールをインポートできます。

main_program.py

import hello
...

プログラムを実行すると、エラーなしで完了します。

モジュールのパスを変更すると、現在のディレクトリに関係なく、モジュールに確実にアクセスできます。 これは、特定のモジュールを参照するプロジェクトが複数ある場合に特に便利です。

結論

Pythonモジュールの作成は、他のPython.pyファイルの作成と同じです。 このチュートリアルでは、モジュール内で定義を記述する方法、別のPythonプログラミングファイル内でそれらの定義を使用する方法、およびモジュールにアクセスするためにモジュールを保持する場所のオプションについて説明しました。

モジュールのインストールとインポートの詳細については、How To Import Modules in Python 3を参照してください。