自作ライブラリを作成してみよう

プログラミング言語においてライブラリとは、クラスや関数が定義されているモジュールを整理し、外部から利用できるようにしたもののことです。Pythonでは“import ライブラリ名”というようにimportして使います。
有名なライブラリとしてnumpyやmath、pandasなどがあります。

ライブラリとは

まずは、ライブラリやモジュールの言葉の定義を確認しましょう。

モジュールとは、関数やクラスをまとめた.pyスクリプトのことを指します。
次に大きな括りはパッケージと呼ばれます。パッケージはモジュールをまとめたフォルダのことを指します。後で説明しますが、個々のパッケージフォルダは__init__.pyを持ちます。

最後にライブラリです。ライブラリは、モジュールやパッケージをまとめたフォルダのことを指すことが多いです。

上記を踏まえると、ライブラリ、モジュール、パッケージは以下のような階層構造で表されます。

library
|_ __init__.py
|_ module0.py
|_ package1
 |_ __init__.py
 |_ module11.py
 |_ module12.py
|_ package2
 |_ __init__.py
 |_module21.py
 |_module22.py
| …

ライブラリを作成する

ではライブラリを作成してみましょう。

今回は、一層で完結する以下のようなライブラリを作成します(パッケージと呼んでも良いですが、本記事ではライブラリで統一します)。startlabディレクトリ下に、__init__.pyとfunc.pyを作成しましょう。

startlab
|_ __init__.py
|_ func.py

__init__.pyについて解説します。

これは、pythonが内部でモジュールの検索を行う際の目印となるスクリプトで、ファイル名が重要で中身は空でも構いません。ただ、今回作成するライブラリstartlabを呼び出すと初めに__init__.pyが実行されるので、デフォルトで行いたい処理がある場合にはここに書いてしまいましょう(後述)。

次に、startlabライブラリ内で定義するモジュールfunc.pyです。

このモジュール内に機能を関数やクラスとして定義します。
今回は、一次関数を返すlinear()という関数を一つ定義します。以下のコードをfunc.pyに追加してください。

func.py

def linear(x, a, b):
return a*x + b

ライブラリを適切な場所に置こう

startlabライブラリは、パソコン上のどこに置いても良い訳ではありません。プログラムはパソコン上でパスの通っているディレクトリにのみ検索をかけることが可能だからです。

置く場所として、以下の2つをご紹介します。

①現在のディレクトリに置く

 startlabライブラリを、呼び出し元のファイルと同じディレクトリに置く方法です。同一ディレクトリはデフォルトでパスに追加されるので、問題なくstarlabライブラリを見つけてimportすることが出来ます。

main.py (呼び出し元のファイル)
startlab
|_ __init__.py
|_ func.py

② site-packagesに置く

1つ目の方法には欠点があります。startlabライブラリを使うときは、いちいち呼び出し元のファイルと同じディレクトリに置く必要がある点です。startlabライブラリを複数のファイルで使うとすると、ライブラリがあちこちに存在することになり、汎用性に欠けます。

そこでsite-packagesディレクトリに置くことが推奨されます。site-packagesはpythonのライブラリなどが置かれている、既にパスの通っているディレクトリです。実は外部ライブラリ(numpyやpandas)なども、インストールするとsite-packagesに置かれます。

site-packagesの場所を調べるには以下のコマンドをターミナルで実行します。

$python -m site

するとsys.pathの中に‘/site-packages’で終わるパスが出てきます。そのディレクトリに自作ライブラリを置くと、どのファイルからでもimportすることが可能です。

ライブラリをimportしよう

ではstartlabライブラリをimportして使ってみましょう。

main.py

import numpy as np
import startlab
if __name__ == "__main__":
x = np.arange(10)
a = 1
b = -5
y = startlab.func.linear(x, a, b)
print(y)
[-5 -4 -3 -2 -1 0 1 2 3 4]

__init__.pyを活用しよう

__init__.pyは、pythonがライブラリ/モジュール検索を行う際の目印です。
また、__init__.pyはpythonが検索を行った際に最初に実行されるスクリプトでもあります。

今回は例として、__init__.pyからfunc.pyのlinear関数を呼び出すことで、startlabのimport元からlinear関数を使う際の構文を簡略化してみましょう。

先ほどのmain.pyの例では、linear関数を使用する為に“startlab.func.linear()”と書きました。これはlinear関数がモジュールfunc.pyで定義されている為です。しかし、今回は__init__.pyで以下のようにlinear関数をimportしてみましょう。

__init__.py

from .func import linear

ここで“.func”の“.”とは同ディレクトリ(__init__.pyから見て、つまりstartlabディレクトリ)を指すために、同一ライブラリ内のモジュールをimportするのに必要な構文です。
こうすることで、main.pyにおいて“startlab.func.linear()”の代わりに“startlab.linear()”として使用文を簡略化できるようになります。言い換えるとstartlabをimportするだけでlinear関数を検索することが出来るようになります。


Startlabのプログラミング入門コースは、Python未経験者・初学者にもわかりやすいカリキュラムと続けやすいサポート体制が魅力。自分の学習目的に合っているか、どういった知識を身に付けることができるのかなど、無料カウンセリングでぜひご相談ください!カウンセリングは毎日実施中、お待ちしております!

無料カウンセリングを予約する