unmoをsetup.pyを使ってパッケージにしてみた
Pythonのパッケージと言えばsetup.py
です。依存関係も解決してくれるし、必要ならwheel
を使ったプリビルトパッケージも含めることができます。
でも書くのが面倒くさいと思ってずっと放置していたんですが、先日知人にUnmo
を試してもらおうと思ったら思いの外手間がかかりました。知人がコマンドプロンプトに明るくないのも手伝って、
- 「
pip install dill
して」 - 「ぷっぷ……なに?」
- 「ぴっぷ いんすとーる でぃる」
- 「ぴっぷい……?」
などという珍妙な会話に。二度あの会話をするくらいならsetup.py
を書いたほうがずっと楽だと気づきました。
教科書
例によってスマパイです。私が使っているPython 3.6.3ではコマンドとしてインストールされず、また別途__main__.py
を用意する必要がありましたが、setup.py
の書き方はとても参考になりました。
スマートPythonプログラミング: Pythonのより良い書き方を学ぶ
- 作者: もみじあめ
- 発売日: 2016/03/12
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
ファイルの移動と追加
たぶん文章で説明するより「パッケージ化する前」と「パッケージ化した後」を見比べてもらうほうが圧倒的に早いです。
とりあえず教科書通りにsetup.py
と__init__.py
を追加してpython setup.py install
を実行しました。ただunmo
というコマンドを用意するよう書いたのですが、最近は__main__.py
というファイルも置いておかないと認識されないようです。
というか、それでもコマンドとしてはインストールされず、最終的にpython -m unmo
として呼び出す形になりました。コマンドにしても引数を取るわけではないので、これで良かったのかも知れません。
またパッケージングにあたって、偶然開いていたFlaskのリポジトリを大いに参考にしました。自分でコードを書くのも楽しいですが、ここ最近はコードリーディングしたい気分でいっぱいです。何かお手本になるような、そして私でも把握できるような小規模なPythonプロジェクトがあればいいんですが……。
では、今回は完全に手抜きですがここまで。ちなみにunmo
の現行バージョン0.2.1には終了時に辞書ファイルを保存できないというバグがありますので使わないでください。成果が欲しいからといって安易にパッケージ化したりリリースしたりするのは本当に良くないことです。アンチパターンですので、読者の方は絶対に真似しないでください。