概要
自身で何か開発をしていて、クラスや関数をモジュール化することがあるかもしれません。
setuptools
を使ってsetup.py
を書いてビルドすることによって、
import mylib
みたいなことができるようになりますが、モジュール化するところで
最低限必要なことを備忘録的にまとめたいと思います。
これを準備すればほんとにすぐにモジュール化できます。
必要最低限なことだけ書くので、細かいところは公式ドキュメント
を参照お願いします。
解説
解説は以下の通りです。
-
フォルダとファイル
を用意する。 -
ライブラリの中身
を少し書く。 -
__init__.py
を少し書く。 -
setup.py
を少し書く。 -
python setup.py
のコマンド実行 - オプション(ライブラリが他のライブラリに依存している時)
用意するもの
必要なものはこれだけです。
- ライブラリの中身を入れるフォルダ
- 何か関数とかクラスとかを定義したコード(
.py
) setup.py
-
__init__.py
(アンダースコアは前と後ろ2つずつです)
今回はmylib
というモジュールを作るとして、以下のように準備しました。
tree .
setup.py
mylib
|-- __init__.py
|-- mylib.py
ライブラリにしたい関数を書く。
そして、ライブラリの中身になるmylib.py
に以下のように適当に関数を書きました。
class Test():
def __init__(self):
pass
def pt():
print("from class Test")
def test():
print('hello world')
__init__.py
を準備する。
- なんのファイルをインポートするのか
- どの関数をインポートするのか
について数行書くだけです。
from .mylib import (
test,
Test,
)
__version__ = '0.0.0'
この場合、
mylib.py
というファイルから、test
という関数と
Test
というクラスをこのライブラリに入れる、というふうに書いているだけです。
setup.py
を少し書く。
from setuptools import setup, Extension,find_packages
setup(
name = 'mylib',
packages=find_packages(where='mylib'),
package_dir={'': 'mylib'},
)
これで大丈夫です。
setup.py
を走らせる。
python
のライブラリはシェアドオブジェクトファイル(soファイル)
として
python の環境フォルダに格納されます。場所はhttps://qiita.com/kenmaro/items/d589d32115154dcd26b2この記事を
参照してください。
このフォルダに入れておけば、どこでpython
を実行しても
import mylib
とすることができます。そのようにしたい時は、
python setup.py install
と実行してください。
このフォルダに格納するのではなく、setup.py
がある階層にsoファイルのフォルダを作りたい時
(このときはこの階層でだけimport mylib
できます。)
は、
python setup.py build_ext --inplace
とすることができます。
オプション(他のライブラリに依存している時)
例えば、自作ライブラリがtensorflow
を内部で呼んでいるなど、
他のライブラリを使っていることがほとんどだと思います。
その時は、以下の作業がプラスで
必要です。
-
requirements.txt
を作る。 -
setup.py
を少しだけ変更する。
requirements.txt
requirements.txt
に
tensorflow==2.2
というように、必要なライブラリを書いときます。
setup.py に追加
from setuptools import setup, Extension,find_packages
def _requires_from_file(filename):
return open(filename).read().splitlines()
setup(
name = 'mylib',
packages=find_packages(where='mylib'),
package_dir={'': 'mylib'},
install_requires=_requires_from_file('requirements.txt'),
)
このように書きます。
これであとは先ほどと同じようにpython setup.py install
などをやってみてください。
まとめ
今回はできるだけ最低限の手順だけで
pythonの自作モジュールをsetuptools
を使うことで実装すること
を解説してみました。
今回はこの辺で。
おわり。