Pythonで自分だけのクソライブラリを作る方法
Pythonでライブラリを作る
この記事は、Pythonの基礎が分かり、pipでライブラリをインストールしたことあるくらいのレベルの人を想定しています。初心者向けの記事です。
前提知識として、Pythonのライブラリ・パッケージ・モジュール・クラス・関数の定義や違いに関しては、以下記事あたりを参考にしてください。
この記事では、Pythonで自作ライブラリを作ります。pip install hogehoge
でインストールできるあれですね。
初心者の方(何を隠そう私も初心者です)だとpip install
でインストールできるライブラリって、GoogleとかFacebookのような選ばれたエリート組織だけが作れるものと思っていませんか?私もつい最近までそう思っていました。実はあれ、個人でも簡単に作れてしまいます。
pip install hogehoge
で、世界中の誰でもインストールできるライブラリを作れてしまうのです。興奮してきませんか?興奮したあなたは立派な変態Pythonistaです。というわけで、自作ライブラリを作る旅に出ましょう!
ずばり目標はpip install unko
でインストールできるクソライブラリを作ることです。
使い方は、以下のような感じです。
>>> import unko
>>> unko.deru()
puripuri
クサそうですね。Let's Puripuri!
自作ライブラリを作るメリット
一応ここで、自作ライブラリを作るメリットを改めて書いておきます。
1つは当然、先程書いたように世界中の人に使ってもらえるという点ですね。TensorFlow
, Scikit-learn
のようなライブラリと同じように、世界中の人が自分のライブラリをpipでインストールできるのです。ワクワクしますよね。
もう一つは、ライブラリ化しておくと、どこからでも使うことができる点です。Pythonはpipでインストールしなくても、hogehoge.py
というファイルを直接指定してimportできるのですが、ファイルの場所によっては地味に面倒だったりします。特に、importしたいファイルが、上の階層にある場合ですね。
解決方法は、調べれば色々出てくるのですが、いっそライブラリ化しちゃえばpip installすることで、どこでも使えて便利ですね!
自作ライブラリのファイル構成
ファイルの構成は以下のようになります。
unko
├── setup.py
└── unko
├── __init__.py
└── unko.py
シンプルかつクサそうですね。
メインとなるunko.py
の中身をみてみます。
def deru():
print('puripuri')
deru()
という関数を呼ぶとpuripuri
と表示されます。理由とか意味は聞かないでくださいね(私にも分かりません)。
setup.py
の中身は以下です。これによりpip
でインストールできるようになります。
from setuptools import setup, find_packages
setup(
name='unko',
version='0.1',
packages=find_packages()
)
setup.py
には、これ以外にも必要な(依存する)ライブラリ等、たくさんのオプションがあるのですが、今回は必要最小限にしています。
__init__.py
は以下とします。
from unko.unko import *
実は、このファイルはなくても良いのですが、このファイルが無いとライブラリを使うときimport unko
でなくfrom unko import unko
とする必要があり、スマートじゃなくなるのでファイルを作成しています。
__init__.py
に関しては、詳細この記事では触れませんが、手っ取り早くは以下記事参考にしてみてください。
ローカルでの自作ライブラリのインストール
通常のインストール
いよいよ自作のクソライブラリをインストールしてみましょう。まずはローカル環境です。unko
ディレクトリ直下(setup.py
と同じ階層)で、以下コマンドを実行します。
$ pip install .
以下のように表示されたらインストールは成功です(環境によって多少表示は異なるかもしれません)。
Successfully built unko
Installing collected packages: unko
Successfully installed unko-0.1
震える手で実行してみましょう。
>>> import unko
>>> unko.deru()
puripuri
と出たら、自分だけのクソライブラリ誕生です。おめでとうございます!
アンインストールする場合は以下コマンドです。
$ pip uninstall unko
開発(editable)モードでのインストール
pip installで自作ライブラリをインストールするとき、たまに以下のように-e
オプションをつけている例をみかけます。
$ pip install -e .
これはeditable
モードと呼ばれるものです。何が違うかというと、ライブラリを更新すると、いちいちpip install
し直さなくても、その内容が即座に反映されます。
例えば、pip install -e .
をした後、unko.py
を以下のようにprint('puripuri')
からprint('buriburi')
に変更します。
def deru():
print('buriburi')
すると、以下コマンド実行するとburiburi
と表示されます。
>>> import unko
>>> unko.deru()
変更のたびにpip install
しなくて良いので、開発中はとても便利ですね。editableモードは、他にも普通のpip install
と違いがあるので、公開するライブラリをつくる際には、pip install
で動作を確認してから、GitHub等にアップロードした方が良いです。
最初、setup.py
でpackages
の設定をしていなくてハマったりしました。
自作ライブラリをGitHubからインストール
これでローカルでクソライブラリができましたが、これだと外で急にクソライブラリが必要になったとき困ってしまいますね。
そんなときは、GitHubのリポジトリにクソライブラリをアップロードしておきましょう。実際に用意したリポジトリが以下です。
ファイル構成は、先程のものと全く同じです。クサそうですね。
pipは、実はpip install git+<リポジトリのURL>
でGitHub上のリポジトリのライブラリをインストールできます。
なので、以下コマンド実行すれば、ネットに繋がっていれば誰でもどこでもクソライブラリをインストールすることができます。
$ pip install git+https://github.com/karaage0703/unko
PyPIに登録
ここまでくれば目標のpip install unko
でインストールできるクソライブラリを世界中に公開するまであと一歩です。
pip install <package name>
でインストールできるようにするには、PyPI(Python Package Index)に登録する必要があります。ただ、私はPyPIでクソライブラリを公開はできませんでした(迷惑かかりそうなので…)
以下記事を参考に登録すればPyPIに登録できます。 …はずです。いつか、もっと役に立つライブラリを作って登録します。
PyPIへの作業は、少し手間なので自動化できると便利ですね。以下はGitHub Actionsを使用した例です。
自動化までは不要な人は、以下のようなスクリプトをつくると便利かもしれませんね。
setup.py
をpyproject.toml
に置き換え
最近はsetup.py
でなくpyproject.toml
を使うのが今風らしいです。以下記事参照ください。今から作るならpyproject.toml
版の方が良いかもしれません。ただpyproject.toml
だけだとpip install -e .
ができないことには注意しましょう。
GitHubの例は以下です。
まとめ
Pythonで自作クソライブラリをつくる方法をまとめてみました。思ったよりPythonのライブラリ手軽に作れて便利ですね。
少し大きめなプロジェクトの開発でPythonを使っているときは、ライブラリを外に公開しなくても、editableモードなど使うと楽になるケースがあるかもしれませんね。
あとは、PyPIに登録まではしなくても、よく使う個人的なライブラリは、GitHubにアップしてインストールできるようにしておくと便利かもしれませんね。
関連記事
参考リンク
参考リポジトリ
変更履歴
- 2023/08/04
setup.py
のpyproject.toml
への置き換えに関して追記 - 2023/05/02 参考リンク・リポジトリ追加
Discussion