10
11

More than 1 year has passed since last update.

Pythonで自作パッケージをつくる

Last updated at Posted at 2021-11-27

この記事ではPythonのライブラリを自作する手順について説明していきます。
自作ライブラリというとハードルが高く感じられますが、ローカルにPython環境をイチから構築できている方であれば難くないレベル感だと思います。

そもそもパッケージって?

パッケージとは

プログラムを書く上で、様々な機能を提供してれる便利なプログラム群です。過去に誰かが作った機能を使い回せるため、すべてを新しく自分でプログラムする必要はなく、効率的にプログラムを書くことができます。広くライブラリとも呼ばれます。

現在ではプログラムを書く時でも、わざわざゼロから書く必要は無いわけであり、先人が残したライブラリを利用すればかなり少ない時間や労力でうまく動作するプログラムを完成させることができる。
Wikipediaより

そして、パッケージにはPythonをインストールしただけで使える標準ライブラリと別途インストールの必要な外部ライブラリがあります。

  • 標準ライブラリ
    • Pythonに標準で付いている
    • 機能としては、OSへのアクセス・日付・ファイル圧縮等々
  • 外部ライブラリ
    • 別途インストールが必要
    • 基本的にpipでインストールする

インストールしているライブラリをみるにはターミナルで以下を叩きます。

pip list

構成している要素

Pythonのライブラリとしては「モジュール」と「パッケージ」の2つの概念があります。ひとことで「ライブラリ」というと、この2つを同時に指します。
パッケージ概念.jpg

  • モジュール
    • .pyファイルのこと
    • つまり関数やクラスの集まり
    • ファイル名がモジュール名となる
  • パッケージ
    • 複数のモジュールを1つのディレクトリにまとめたもの
    • 基本的に関連する機能(モジュール)をまとめておく

パッケージをつくるには、適切なディレクトリ構成でモジュールや必要なファイルを配置する必要があります。

パッケージをつくる

今回、作成パッケージが提供する機能としては動物の鳴き声を返す機能とします。
animalsパッケージ > catモジュール > greet関数を指定するとmeowと出力してくれる感じです。

モジュールをつくる

実際にここから手を動かして、モジュールから作っていきましょう。
動物は猫、犬、ニワトリを作りを用意しました。以下の各Pythonのファイルを用意したら、それらはモジュールとなります。

cat.py
def greet():
    print("meow")
dog.py
def greet():
    print("bowwow")
chicken.py
def greet():
    print("cock a doodle doo")

モジュールはフォルダ内に以下のように配置します。
最終的に、animalsをパッケージ化したいということを想定したディレクトリ構成となっています。

animal_greets
└── animals
    ├── chicken.py
    ├── cat.py
    └── dog.py

ここまではPythonを普通に書いただけですね。次でパッケージ化を行いましょう。

パッケージ化

先ほど作成したbirdsフォルダとmammaliansフォルダをパッケージ化します。
まず、ディレクトリ内に__init__.pyファイルとsetup.pyを配置しましょう。

animal_greets
├── animalians
|   ├── __init__.py ←追加
|   ├── cat.py
|   ├── chicken.py
|   └── dog.py
└── setup.py ←追加

__init__.pyは、モジュール検索用のマーカで、パッケージ内のモジュールを正しく認識させるものらしいです。←
中身は以下のように書くことで、外部から呼び出す際にモジュール名を省略できます。

__init__.py
from animals.cat import greet as cat_greet
from animals.chicken import greet as chicken_greet
from animals.dog import greet as dog_greet

setup.pyはpipによるインストールのために必要なファイルです。
中身は以下のように書きます。他に色々な項目があるようですが、最小限に書く場合は以下で問題ないです。

setup.py
from setuptools import setup, find_packages

setup(
    name='animal_greet',
    version='1.0',
    packages=find_packages()
)

これでパッケージのコードは完成です。

パッケージをインストールする

ローカルに先ほど作成したパッケージをインストールして動かしてみましょう。
まず、パッケージと同じディレクトリ階層で以下のコマンドを実行します。

$ pip install .

するとビルドが行われてpipにインストールされます。
以下のコマンドでインストール済みのライブラリを確認して、animal-greetがあれば成功です。

$ pip list
Package             Version
------------------- ---------
animal-greet        1.0

実際に使えるか試してみます。以下はPythonインタプリタからanimal-greetanimalsモジュールを利用した例です。

$ Python3
>>> import animals
>>> animals.cat_greet()
meow
>>> animals.dog_greet()
bowwow
>>> animals.chicken_greet()
cock a doodle doo

ちゃんとパッケージから関数を呼び出せました!

参考

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11