Python3でモジュールを作成する方法
序章
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でモジュールをインポートする方法を参照してください。