1. 精神的なハードルが高い自作パッケージの配布
自作パッケージの配布は慣れていないとハードルが高い。
設定項目が多すぎる。ディレクトリ構成はどうすれば良い?ライセンスはどうする?
それだけパッケージを配布するのは大変なことなのでしょう。
ただ、個人や限定されたチーム内に配布先が限定されている場合にはこだわりすぎる必要がありません。
今回の記事では配布先が限定されていることを前提に最低限の配布パッケージ作成を検討します。
1.1. 配布形式はtar.gzとする
配布物は
-
ソースコード配布物
-
ビルド済み配布物
の2種類。
どちらの配布物が良いか悩みます。
「検索してみると両方作成して配布すれば良い」のような情報も見つかります。
両方だと面倒なので今回は ソースコード配布物 で試してみます。
ソースコードで配布しておけば大きな問題は生じないだろうという適当な判断です。
難しいことをしないのであれば特段の問題は起きないでしょう。
2. 配布物の作成
実際に配布物を作成してみます。
2.1. パッケージ名の決定
今回はdivepackagingとします。
2.2. ディレクトリ構成
配布物の作成で悩むのはディレクトリ構成です。
今回はこのような構成です。
.
├── divepackaging
│ ├── __init__.py
│ └── hello.py
├── setup.cfg
└── setup.py
上記の中で実際の処理内容を記述したモジュールがhello.pyです。
今回は簡単に文字列をprintするだけの簡単な関数を用意します。
def main():
print('Hello divepackaging')
hello.py以外の3つのファイルが配布物を作成するためのファイルです。
-
__init__.py
-
setup.py
-
setup.cfg
2.3. __init__.py
このファイルはディレクトリをパッケージとして扱うためのものです。
今回は空ファイルです。
ただの空ファイルなので置くだけです。簡単ですね。
このファイルについて調べるとpython3から不要になったという情報が出てきます。
ただし今回は必要です。
setup.cfgでパッケージを自動的に見つけてくれるように設定しているのですが__init__.pyが無いと見つけてくれません
2.4. setup.py
配布物を作成するためのモジュールですが設定内容はsetup.cfgに記述しています。
だからこのファイルのコードは簡単で固定的です。同じ内容で使い回しが可能で編集する必要はありません。
from setuptools import setup
setup()
2.5. setup.cfg
配布物の設定情報です。
今回は最低限に絞っています。
[metadata]
name = divepackaging
[options]
packages = find:
別の配布物を作成する場合に変更になるのは
-
name =
だけです。他は変える必要はありません。
2.6. 配布物作成のための3つのファイルのうち変数が必要なのは1箇所だけ
3つのファイルを確認しました。それぞれの内容はほぼ固定で使い回し可能です。
変更になるのは1箇所だけです。
-
name =
これだけなら配布物作成のハードルもだいぶ下がったのでは無いでしょうか?
最低限ならここまで簡単になります。
2.7. ソースコード配布物の作成
下記コマンドで配布物を作成します。
python setup.py sdist
配布物ができています。
-
./dist/divepackaging-0.0.0.tar.gz
2.8. ソースコード配布物からインストール
pipでインストールします。
pip install divepackaging-0.0.0.tar.gz
2.9. importして実行してみる。
実際にimportして試してみる。
実行用のモジュールを作成します。
from divepackaging.hello import main
main()
実行します。
python work.py
$ python work.py
Hello divepackaging
無事実行できました。
3. まとめ
最低限の設定で自作パッケージを配布すること検討して試してみました。
配布のための設定に必要なのは3ファイル。
そのなかでも編集が必要なのは一箇所だけ。
とても簡単に配布物を作成できました。
これならば精神的なハードルも低いことでしょう。
今回は以上です。