Pipenv から Poetry への乗り換え
乗り換えるリポジトリ
GitHub - kk6/aeroplast: Transparent PNG conversion (Mainly for Twitter)
twitterにアップロードしたPNGがJPGに強制変換されて見栄えが悪いという問題がある。それを回避するために画像の四隅どこかに1pxの透過ドットを打ち込むという方法がある。いちいちペイントソフトでそれを毎回やるのが面倒なのでコマンドラインで画像のPath渡したら変換してくれるコマンドラインツールを以前作った。こいつをPipenvで管理しているので、Poetryへの乗り換えを試してみる。
Poetry については数日中にもうちょっと突っ込んだ記事書きます。
pyproject.toml の生成
init
コマンドで対話形式で情報を入力していくだけ。
$ poetry init This command will guide you through creating your pyproject.toml config. Package name [aeroplast]: Version [0.1.0]: Description []: Transparent PNG conversion. Author [kk6 <hiro.ashiya@gmail.com>, n to skip]: License []: MIT Compatible Python versions [^3.7]: Would you like to define your dependencies (require) interactively? (yes/no) [yes] no Would you like to define your dev dependencies (require-dev) interactively (yes/no) [yes] no Generated file [tool.poetry] name = "aeroplast" version = "0.1.0" description = "Transparent PNG conversion." authors = ["kk6 <hiro.ashiya@gmail.com>"] license = "MIT" [tool.poetry.dependencies] python = "^3.7" [tool.poetry.dev-dependencies] [build-system] requires = ["poetry>=0.12"] build-backend = "poetry.masonry.api" Do you confirm generation? (yes/no) [yes] yes
これで pyproject.toml が生成される。
依存パッケージのインストール
続いて Pipfile を見ながらパッケージを poetry add
で追加する。
(追記) だるいのでツール作った
(追記おわり)
$ poetry add pillow fire logzero Using version ^5.3 for pillow Using version ^0.1.3 for fire Using version ^1.5 for logzero Updating dependencies Resolving dependencies... (3.2s) Package operations: 0 installs, 1 update, 0 removals Writing lock file - Updating six (1.11.0 -> 1.12.0)
インストールしたパッケージは tool.poetry.dependencies
セクションに追記されている。
[tool.poetry] name = "aeroplast" version = "0.1.0" description = "Transparent PNG conversion." authors = ["kk6 <hiro.ashiya@gmail.com>"] license = "MIT" [tool.poetry.dependencies] python = "^3.7" pillow = "^5.3" fire = "^0.1.3" logzero = "^1.5" [tool.poetry.dev-dependencies] [build-system] requires = ["poetry>=0.12"] build-backend = "poetry.masonry.api"
と同時に poetry.lock
ファイルが生成されている。依存関係はこちらに記述されている。
pytestのインストールを忘れていた。
$ poetry add -D pytest Using version ^4.0 for pytest Updating dependencies Resolving dependencies... (0.5s) Package operations: 0 installs, 1 update, 0 removals Writing lock file - Updating pytest (4.0.1 -> 4.0.2)
今回は -D
オプションを付けてインストールしたので、pyproject.toml の tool.poetry.dev-dependencies
セクションの方に追記されている。
[tool.poetry.dependencies] python = "^3.7" pillow = "^5.3" fire = "^0.1.3" logzero = "^1.5" [tool.poetry.dev-dependencies] pytest = "^4.0"
コマンドラインツールとして実行できるようにする
PipenvのときはPipfileに以下のように記述して使っていた。
[scripts] cli = "pipenv run python -m aeroplast"
こんな感じで使っていた
$ pipenv run cli convert ...
Potryの場合は pyproject.toml
の tool.poetry.scripts
セクションに記述する。
[tool.poetry.scripts] aeroplast = "aeroplast.cli:main"
Poetryの便利なところは、パッケージをビルドした際にこの設定がそのまま setup.py
の console_scripts
として記述される。ビルドする時にコマンドとして実行できるようにあらためてsetup.pyを書く必要がない。
... entry_points = \ {'console_scripts': ['aeroplast = aeroplast.cli:main']} ...
とまあそれはさておき poetry run aeroplast
で実行できるようになった。
$ poetry run aeroplast Type: CLI String form: <aeroplast.cli.CLI object at 0x100f6e978> Docstring: Transparent PNG conversion Usage: aeroplast aeroplast convert aeroplast resize
また、poetry develop
で pip install -e .
するのと同様に開発途中のパッケージをvenvにインストールできる。インストールした上で poetry shell
でvenvをactivateすると aeroplast
コマンドのみで実行可能になる。
$ poetry shell Spawning shell within /Users/kk6/PycharmProjects/aeroplast/.venv Welcome to fish, the friendly interactive shell $ poetry develop develop is deprecated use install instead. Installing dependencies from lock file Nothing to install or update - Installing aeroplast (0.1.0) $ aeroplast Type: CLI String form: <aeroplast.cli.CLI object at 0x107dfa908> Docstring: Transparent PNG conversion Usage: aeroplast aeroplast convert aeroplast resize <aeroplast.cli.CLI object at 0x107dfa908>
以上で移行完了。わりと簡単。しかも今すぐにでも以下の2行を実行するだけでPyPIに公開可能な状態となっている。
$ poetry build $ poetry publish
Poetry便利。