2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

setuptools でサクッと自作モジュールを作る(python)

Posted at

概要

自身で何か開発をしていて、クラスや関数をモジュール化することがあるかもしれません。

setuptools を使ってsetup.pyを書いてビルドすることによって、

test.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に以下のように適当に関数を書きました。

mylib.py

class Test():
    def __init__(self):
        pass

    def pt():
        print("from class Test")


def test():
    print('hello world')

__init__.py を準備する。

  • なんのファイルをインポートするのか
  • どの関数をインポートするのか

について数行書くだけです。

__init__.py
from .mylib import (
    test,
    Test,
)

__version__ = '0.0.0'

この場合、
mylib.py というファイルから、testという関数と
Testというクラスをこのライブラリに入れる、というふうに書いているだけです。

setup.py を少し書く。

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

requirements.txt
tensorflow==2.2

というように、必要なライブラリを書いときます。

setup.py に追加

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を使うことで実装すること
を解説してみました。

今回はこの辺で。

おわり。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?