Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

【Python入門】Pythonで自作モジュールやパッケージを作ってimportできるようにする方法

Pythonのモジュールやパッケージについて、その違いや、自作モジュールや自作パッケージを作る方法と使い方の基本を解説

今回はPythonプログラムづくりがもっと便利に、もっと楽しくなる自作モジュールまたは自作パッケージの基本的な作り方と基本的な使い方の解説です。

プログラミング言語の人気オンラインコース

Pythonのモジュール、パッケージ、ライブラリの違いとは?

モジュールとは、Pythonのファイル(ソースコード?拡張子がpy)です。複数のモジュールをまとめたものがパッケージです。そして、そうしたパッケージを含む関連ファイルをまとめたものがライブラリです。

たとえば、足し算をするためのPythonファイル「addition.py」を作ったとします。それがモジュールです。仮にそのaddition.pyの中身は次のものだとします。

def fnc_add (left_arg, right_arg):
    result = left_arg + right_arg
    return result

単純に足し算するだけの機能です。

この足し算だけでは不便なので引き算、掛け算、割り算のためのプログラムもそれぞれ、

  • subtraction.py
  • mutliplication.py
  • division.py

と作ります。

additcition.pyとこれら3つで四則演算ができるようになりました。多少乱暴にいうと、これらのモジュールをすべてまとめて1つのフォルダに放り込むと、そのフォルダがパッケージとなります

仮にそのフォルダ名をarithmetic operationsという名前にしましょう。詳しい設定は省きますが、そのようにするとそれでパッケージ「arithmetic operations」が完成です。

しかし、普通の四則演算以外にも、ベクトルの計算、行列の計算、微分や積分、さらにはグラフを書いたりといったこともできるプログラムが欲しいですね。そこで、

  • ベクトルや行列の計算のためのパッケージ
  • 微分や積分をするためのパッケージ
  • グラフを描くためのパッケージ

などをどんどん作っていきます。すると数学に関するパッケージがいろいろできます。そこでこれら数学に関連するモジュールやパッケージを1つにまとめたくなります。そこで登場するのがライブラリという概念です

たとえば上の例だと、「math_libraries」みたいな名前のフォルダに数学関連のモジュールやパッケージをまとめれば、乱暴にいうとそのフォルダがmath_librariesという名前のライブラリとなります。

このあたりの用語は使い方は場合によって少し違っていたりするかもしれませんが、実際上はそんなに混乱することはないと思います。

パッケージとなるフォルダを作る場所とカレントワーキングディレクトリの確認

さてこれから作るモジュールを入れるフォルダを作りましょう。そのフォルダが上述の説明のようにパッケージとなります。

まずどこに作るべきかですが、基本的にはPythonファイルを動かすカレントワーキングディレクトリの中に置くこととなります。

カレントワーキングディレクトリを確認するためにPythonの次のコードを実行してください。

import os
os.getcwd()

ここで、例えば

'/Users/hogehoge/bin'

と表示された場合は、このbinフォルダの中にパッケージとなるフォルダを入れます。というわけで、とりあえずそのカレントワーキングディレクトリの中にパッケージとなるフォルダを新規作成しておいてください。

パッケージの名前の付け方

次にそのフォルダの名前を変えましょう。

パッケージの名前については、Python推奨の名前の付け方(命名規則)というものがありまして、それによるとパッケージの名称はすべて小文字で、しかもアンダースコア「_」は使うべきでないとされています。

今回はそれに従って次のようにしました。

mypackages

では続いてこのmypackagesフォルダ(つまりmypackagesというパッケージそのもの)に入れるモジュールであるPythonファイルを次に作ってみましょう。

自作モジュールを作る

エディタ上(私はVisual Studio Codeです)で、Pythonの新規ファイルとして「addition.py」という名前のファイルを作ってその中身として、

def fnc_addition (left_arg, right_arg):
    result = left_arg + right_arg
    return result

ただこれだけを書きます。fnc_additionという関数が定義されているだけのもので、処理の中身はただ足し算するだけです。

そしてこのPythonファイルを上で作成したmypackagesフォルダに保存します。

この時点で、

  • mypackagesという名前のパッケージ(フォルダ)
  • addition.pyという名前のモジュール(Pythonファイル)
  • fnc_additionという名前の関数(addtition.pyの中)

という3つのものができあがりました。では実際にこれらを使ってみましょう。

自作モジュールとパッケージの使い方

これで準備が整いました。あとはPythonファイルをもう1つ新規作成しましょう。自作モジュールや自作パッケージを実際に利用するコードを書くためです。それを仮に「use_mylibs.py」としましょう。

このときの自作モジュールまたは自作パッケージの基本的な使い方として次の2つ種類を紹介しておきます。他にもいくつか書き方・使い方のバリエーションがあります。

基本的使い方その1

そのuse_mylibs.pyの中身として次のコードを書きます。

from mypackages.addition import fnc_addition

fnc_addition(2,3)

見てわかると思うのですが、

from パッケージ名.モジュール名 import そのモジュールの中の関数名

という書き方になっています。これが最も基本的な(?)使い方だと思います。続いて、別の使い方も見ていきます。

基本的使い方その2

次にパッケージ内(今回はmypackagesフォルダ内)に、次のような名前のPythonファイルを作成しましょう。

__init__.py

これはこのとおりの名前にしてください。これが作ったパッケージについて初期設定を上手くしてくれるファイルとなります。

続いてその__init__.pyの中身として次のコードを書いてください

from mypackages.addition import fnc_addition as add

これは、

from パッケージ名.モジュール名 import そのモジュールの中の関数名 as その関数のニックネーム(略称)

という書き方になっています。

そして上で作ったuse_mylibs.pyの中身として、今度は、

import mypackages
mypackages.add(2,3)

とだけ書いて実行してみてください。結果は、使い方その1と同じになるはずです。

この使い方のほうが見た目がシンプルですが、逆にいえば関数の名前などの情報量が少なくなるので、関数の名前の付け方などにもよりますが、どのモジュールのどの関数なのかがパッと見ただけはわかりにくくなる場合もあり、長いコードを書くときには注意が必要となることもあるでしょう。

愛を分かち合いましょう