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使っているように見える!)