すなぶろ

フリーランスのWebエンジニアがPythonを中心にプログラミング情報を紹介していきます。Rubyも書きますが、今はPython勉強中。一緒にPythonista目指しましょう!

unmoをsetup.pyを使ってパッケージにしてみた

Pythonのパッケージと言えばsetup.pyです。依存関係も解決してくれるし、必要ならwheelを使ったプリビルトパッケージも含めることができます。

でも書くのが面倒くさいと思ってずっと放置していたんですが、先日知人にUnmoを試してもらおうと思ったら思いの外手間がかかりました。知人がコマンドプロンプトに明るくないのも手伝って、

  • pip install dillして」
  • 「ぷっぷ……なに?」
  • 「ぴっぷ いんすとーる でぃる」
  • 「ぴっぷい……?」

などという珍妙な会話に。二度あの会話をするくらいならsetup.pyを書いたほうがずっと楽だと気づきました。



教科書

例によってスマパイです。私が使っているPython 3.6.3ではコマンドとしてインストールされず、また別途__main__.pyを用意する必要がありましたが、setup.pyの書き方はとても参考になりました。

ファイルの移動と追加

たぶん文章で説明するより「パッケージ化する前」と「パッケージ化した後」を見比べてもらうほうが圧倒的に早いです。

とりあえず教科書通りにsetup.py__init__.pyを追加してpython setup.py installを実行しました。ただunmoというコマンドを用意するよう書いたのですが、最近は__main__.pyというファイルも置いておかないと認識されないようです。

というか、それでもコマンドとしてはインストールされず、最終的にpython -m unmoとして呼び出す形になりました。コマンドにしても引数を取るわけではないので、これで良かったのかも知れません。

またパッケージングにあたって、偶然開いていたFlaskのリポジトリを大いに参考にしました。自分でコードを書くのも楽しいですが、ここ最近はコードリーディングしたい気分でいっぱいです。何かお手本になるような、そして私でも把握できるような小規模なPythonプロジェクトがあればいいんですが……。

では、今回は完全に手抜きですがここまで。ちなみにunmo現行バージョン0.2.1には終了時に辞書ファイルを保存できないというバグがありますので使わないでください。成果が欲しいからといって安易にパッケージ化したりリリースしたりするのは本当に良くないことです。アンチパターンですので、読者の方は絶対に真似しないでください。