※ Pycon 2020 の企業ブースにて行った LT 用のスライドです
自己紹介
- 山元 翔太
- ビザスク アドバイザー開発チーム
- フロントエンド中心
はじめに
- Python は npm, bundler のような明確なデファクトスタンダードなツールがない
- 大体のツールが pip を内部で使ってはいる
- やりたいことや、開発スピード等を考慮して選定する
やりたいこと
- 子依存まで含めたバージョンの固定
- パッケージのバージョンアップ
- 簡単なスクリプトの登録
話さないこと
- パッケージのビルド、PyPI へ公開など
- setup.cfg, wheel
- ライブラリとして公開しないアプリケーションを想定
紹介するツール
- pip-tools
- pipenv
- poetry
今回話さないツール
- anaconda
- 主に機械学習を行う環境を構築する際によく使われる
- Web アプリの開発に利用するには向いていない
- flit
- Pyflow
pip-tools
バージョン管理
- requirements.in, requirements.txt
- dev-requirements.in 等を用意することで dev パッケージと分けることができる
-
pip-compile requirements.in
でrequirements.txt
を生成する -
pip-sync
でインストールする
バージョンアップ
- 個別にパッケージをアップデートする事ができる
pip-compile --upgrade-package django
簡単なスクリプトの登録
- なし
pipenv
バージョン管理
- Pipfile, Pipfile.lock
- dev パッケージと分けて記述できる
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages]
requests = "*"
[dev-packages]
pytest = "*"
バージョンアップ
- すべてのパッケージをまとめて更新する
- 個別にパッケージを更新することはできない
- install 時にもすべてのパッケージを更新する
- Pipfile に記述したバージョンを超えることはない
簡単なスクリプトの登録
- Pipfile の scripts に記述する
-
pipenv run foo
で実行
-
[scripts]
lint = "flake8"
その他
- 1 年半ほどリリースされていない時期があった
- 今年の 4 月にリリースされ、以降数回リリースされている
- https://pypi.org/project/pipenv/#history
poetry
バージョン管理
- pyproject.toml, poetry.lock
- dev パッケージと分けて記述できる
[tool.poetry.dependencies]
requests = { version = "^2.13", extras = [ "security" ] }
[tool.poetry.scripts]
my-script = 'my_package:main'
バージョンアップ
- 個別にパッケージの更新ができる
- 子依存まで個別にアップデートする必要がある
簡単なスクリプトの登録
-
*.py
を用意しそれを実行する機能がある- 直接コマンドを記述することはできない
- 都度ファイルを用意する必要があるので手軽さはない
- 複雑なことをするのには便利
その他
- メンテナが少なく開発スピードが遅め
まとめ
- pipenv
- 最近リリースが増えて改めて活発になってきている?
- poetry
- 個人的には一番使いやすい
- 時間はかかるがプルリクを送ればちゃんと取り込んでくれる