31
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

Python パッケージマネージャー比較

Python パッケージマネージャー比較

by yamagen0915
1 / 23

※ 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.inrequirements.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"

その他


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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
31
Help us understand the problem. What are the problem?