📚

Pythonで自分だけのク゜ラむブラリを䜜る方法

に公開
2025/04/27

Pythonでラむブラリを䜜る

この蚘事は、Pythonの基瀎が分かり、pipでラむブラリをむンストヌルしたこずあるくらいのレベルの人を想定しおいたす。初心者向けの蚘事です。

前提知識ずしお、Pythonのラむブラリ・パッケヌゞ・モゞュヌル・クラス・関数の定矩や違いに関しおは、以䞋蚘事あたりを参考にしおください。

https://ai-inter1.com/python-module_package_library/

この蚘事では、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に関しおは、詳现この蚘事では觊れたせんが、手っ取り早くは以䞋蚘事参考にしおみおください。

https://qiita.com/FN_Programming/items/2dcabc93365a62397afe

ロヌカルでの自䜜ラむブラリのむンストヌル

通垞のむンストヌル

いよいよ自䜜のク゜ラむブラリをむンストヌルしおみたしょう。たずはロヌカル環境です。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のリポゞトリにク゜ラむブラリをアップロヌドしおおきたしょう。実際に甚意したリポゞトリが以䞋です。

https://github.com/karaage0703/unko

ファむル構成は、先皋のものず党く同じです。クサそうですね。

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に登録できたす。  はずです。い぀か、もっず圹に立぀ラむブラリを䜜っお登録したす。

https://blog.amedama.jp/entry/2017/12/31/175036

PyPIぞの䜜業は、少し手間なので自動化できるず䟿利ですね。以䞋はGitHub Actionsを䜿甚した䟋です。

https://aru47.hatenablog.com/entry/2020/11/08/162525

自動化たでは䞍芁な人は、以䞋のようなスクリプトを぀くるず䟿利かもしれたせんね。

https://github.com/AtsushiSakai/PyRoombaAdapter/blob/master/bump_version.sh

远蚘APIトヌクンが必芁になっおからは~/pypircに以䞋のように蚘茉する必芁があるようです。

[pypi]
  username = __token__
  password = <API>

setup.pyをpyproject.tomlに眮き換え

最近はsetup.pyでなくpyproject.tomlを䜿うのが今颚らしいです。以䞋蚘事参照ください。今から䜜るならpyproject.toml版の方が良いかもしれたせん。ただpyproject.tomlだけだずpip install -e .ができないこずには泚意したしょう。

https://nikkie-ftnext.hatenablog.com/entry/why-dont-you-write-pyproject-toml-instead-of-setup-py

GitHubの䟋は以䞋です。

https://github.com/ftnext/unko

たずめ

Pythonで自䜜ク゜ラむブラリを぀くる方法をたずめおみたした。思ったよりPythonのラむブラリ手軜に䜜れお䟿利ですね。

少し倧きめなプロゞェクトの開発でPythonを䜿っおいるずきは、ラむブラリを倖に公開しなくおも、editableモヌドなど䜿うず楜になるケヌスがあるかもしれたせんね。

あずは、PyPIに登録たではしなくおも、よく䜿う個人的なラむブラリは、GitHubにアップしおむンストヌルできるようにしおおくず䟿利かもしれたせんね。

関連蚘事

https://karaage.hatenadiary.jp/entry/2017/12/27/073000

参考リンク

https://packaging.python.org

https://buildersbox.corp-sansan.com/entry/2019/07/11/110000

https://speakerdeck.com/nyk510/pythondeqi-qing-nipatukeziwozuo-rufalsehaliang-itoiuhua

https://teratail.com/questions/239657

https://codehero.jp/python/35064426/when-would-the-e-editable-option-be-useful-with-pip-install

https://blog.hgrs.me/20190520094349

https://qiita.com/Tadahiro_Yamamura/items/2cbcd272a96bb3761cc8

https://qiita.com/FN_Programming/items/2dcabc93365a62397afe

https://qiita.com/shonansurvivors/items/0fbcbfde129f2d26301c#71-本番環境のpypiぞのパッケヌゞ登録

https://qiita.com/c60evaporator/items/e1ecccab07a607487dcf

https://ar-ray.hatenablog.com/entry/2022/06/20/070000

https://blog.shibayu36.org/entry/2023/05/02/203000

参考リポゞトリ

https://github.com/AtsushiSakai/PyRoombaAdapter

https://github.com/rochacbruno/python-project-template

https://github.com/shibayu36/chat-hatenablog

https://github.com/karaage0703/xj_python

倉曎履歎

  • 2023/08/04 setup.pyのpyproject.tomlぞの眮き換えに関しお远蚘
  • 2023/05/02 参考リンク・リポゞトリ远加

Discussion