LoginSignup
1
1

More than 1 year has passed since last update.

poetryでsetup.pyを自動生成する

Last updated at Posted at 2021-08-16

Poetry ってパッケージ管理だけじゃなくて、ビルドとかインストールもやってくれるから、Poetry 使っているとsetup.py (setuptools) って要らなくなるんだけど、やっぱまだなんか怖いし、Pythonコマンド(CLIアプリ)作って pipx で動かしたい、なんて時には、まだやっぱり setup.py が必要な訳で。

余談

余談なんだけど、pyenv 特に pyenv-virtualenv を使ってて、プロジェクトの数が多くなってしまったとする。ふと整理しようとして、どのプロジェクトがどの virtualenv 使ってたかな、って調べようとすると、これが意外と面倒くさい。

  • .python-version のファイルを find を使って調べる
    • find . -name .python-version
  • これで virtualenv を使っている Python プロジェクトが分かる
  • なんていう virtualenv を使っているかは、.python-version ファイルの中に書いてある
    • find . -name .python-version | xargs cat | sort | uniq -c
  • はいはい、使っている virtualenv は分かりました
  • で、どのプロジェクトがどの virtualenv 使ってるんだっけ?
  • ムキー!!

ということで、作りました。

ls-pyenv ってやると、一覧表示にしてくれるよ!

> ls-pyenv
Search under the directory: .
jupyter (3):
  deeplearning_models_pytorch
  object_detection_metrics
  practical_application_ai
ls-pyenv-jaMYHStk-py3.9 (1):
  ls_pyenv
nlp (2):
  fasttext_binary_jawiki
  mecab_dictionary
tflite (1):
  object_detection_tflite
vino (1):
  yolo_various_framework

便利だね!(自画自賛)(たぶんしばらくしたら作ったの忘れる)

Poetryの追加設定

折角pyenv, pyenv-virtialenv, poetry を統合したから、開発は Poetry の下でやりたい。でも折角コマンド作ったから pipx で動かしたい。pipx には setup.py が必要...

poetry の github repository の issue で poetry build の結果から setup.py を抜き出すって会話してた

まずは poetry の追加設定。コマンドの entrypoint を教えないとならない。

[tool.poetry.scripts]
ls-pyenv = "ls_pyenv.ls_pyenv:main"

pyproject.toml に上記を追加しただけ。setup.py の entrypoint の表記とほぼ変わらないので、迷うことはないだろう。もちろんみなさんの状況に応じて ls_pyenv とかなっている所は変更してね。

Makefileの作成

poetry build して、tarball から setup.py を抜き出すんだけど、Makefile 書けば一発じゃんって思った。

PACKAGE = ls_pyenv

.PHONY: build-package, install, install-pipx, clean
build-package:
    $(eval VERSION := $(shell poetry version -s))
    poetry build
    @tar zxf dist/$(PACKAGE)-$(VERSION).tar.gz -C ./dist
    @cp dist/$(PACKAGE)-$(VERSION)/setup.py setup.py
    @rm -rf dist

install: build-package
    python setup.py install

install-pipx: build-package
    pipx install .

uninstall:
    pip uninstall -y $(PACKAGE)

uninstall-pipx:
    pipx uninstall $(PACKAGE)

clean:
    @rm -rf dist
    @rm -rf build
    @rm -rf $(PACKAGE).egg-info
    @rm -f setup.py

これ、PACKAGEの値を変えれば、ほとんどの場合で使えるんじゃないの?なんかすげー気持ち良い(自画自賛)

Makefile なんで、コマンドの先頭はソフトタブじゃなくてハードタブじゃなきゃ駄目ってことに注意。(Makefile 超久しぶりに書いたわ)

後は .gitignore に setup.py を追加すれば、キレイに管理できる。(ビルドにpoetry使っているように見える!)

1
1
1

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