Python3でモジュールを作成する方法

提供:Dev Guides
移動先:案内検索

序章

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

一部のモジュールはPython標準ライブラリから入手できるため、Pythonインストールとともにインストールされます。 その他は、Pythonのパッケージマネージャーpipを使用してインストールできます。 さらに、モジュールはPython .pyファイルで構成されているため、独自のPythonモジュールを作成できます。

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

前提条件

Python 3をインストールし、コンピューターまたはサーバーにプログラミング環境をセットアップする必要があります。 プログラミング環境をセットアップしていない場合は、ローカルプログラミング環境またはサーバー上のプログラミング環境のインストールおよびセットアップガイドを参照して、オペレーティングに適したものにすることができます。システム(Ubuntu、CentOS、Debianなど)

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

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

情報:このチュートリアルのサンプルコードに従うには、python3コマンドを実行して、ローカルシステムでPythonインタラクティブシェルを開きます。 次に、>>>プロンプトの後に例を追加して、例をコピー、貼り付け、または編集できます。


Python 3ローカルプログラミング環境またはサーバーベースのプログラミング環境から、後で別のファイルにインポートするファイルhello.pyを作成することから始めましょう。

まず、Hello, World!を出力する関数を作成します。

hello.py

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

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

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

main_program.py

# Import hello module
import hello


# Call function
hello.world()

モジュールをインポートしているため、ドット表記でモジュール名を参照して関数を呼び出す必要があります。

代わりに、モジュールをfrom hello import worldとしてインポートし、関数をworld()として直接呼び出すことができます。 この方法の詳細については、モジュールのインポート時に…インポートから使用する方法を参照してください。

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

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

最後に、[X21X]ファイルでクラス定義しましょう。 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.

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

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インタープリターを実行します。

python3

次に、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プログラミングファイル内でそれらの定義を利用する方法を説明し、モジュールにアクセスするためにモジュールを保持する場所のオプションについて説明しました。

モジュールのインストールとインポートの詳細については、 Python3でモジュールをインポートする方法を参照してください。