【python】パッケージ管理のPoetryの使い方【djangoでお試し】
poetryとは?
Poetryは、Pythonでの依存関係の管理とパッケージ化のためのツールです。プロジェクトが依存するライブラリを宣言することができ、それらを管理(インストール/更新)します。
python-poetry.org
venv
などと比べてpoetry
が優れている点は
- pythonバージョンとライブラリの整合性が管理できる
- ライブラリの管理が楽になる
この2点になります。特にvenv
の場合には新しいパッケージをインストールした場合はrequirements.txt
を更新しなければならずgit
で管理する際に忘れてた!!なんてことが多々ありました。
poetry
は自動的に更新してくれるため、めちゃくちゃ便利です。
poetryの初期設定
インストール
osx / linux/bash on windows
の場合は下記でインストールします。
https://python-poetry.org/docs/#installation
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
非推奨ですが、1番手軽なのはpip
でインストールする方法です。
$ pip install poetry
仮想環境の場所をプロジェクト内に変更
仮想環境の保存先をプロジェクト内に配置するように変更します。
$ poetry config virtualenvs.in-project true
この設定を行うことで、仮想環境のpath
を設定する必要がなくなり楽になるからです。
poetryの基本の使い方
プロジェクトの作成 – poetry init
https://python-poetry.org/docs/basic-usage/#initialising-a-pre-existing-project
poetry
の始め方は2種類あります。
- 新規プロジェクトを作成 –
poetry new $project_name
- 既存のプロジェクトに作成 –
poetry init
になります。今回はpoetry init
を使用します。
$ poetry init
This command will guide you through creating your pyproject.toml config.
Package name [python-poetry]:
Version [0.1.0]:
Description []:
Author [tomioka-k <test@test.com>, n to skip]: n
License []:
Compatible Python versions [^3.10]:
Would you like to define your main dependencies interactively? (yes/no) [yes]
You can specify a package in the following forms:
- A single name (requests)
- A name and a constraint (requests@^2.23.0)
- A git url (git+https://github.com/python-poetry/poetry.git)
- A git url with a revision (git+https://github.com/python-poetry/poetry.git#develop)
- A file path (../my-package/my-package.whl)
- A directory (../my-package/)
- A url (https://example.com/packages/my-package-0.1.0.tar.gz)
Search for package to add (or leave blank to continue):
Would you like to define your development dependencies interactively? (yes/no) [yes]
Search for package to add (or leave blank to continue):
Generated file
[tool.poetry]
name = "python-poetry"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.10"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
Do you confirm generation? (yes/no) [yes]
全ての処理が完了すると、pyproject.toml
ファイルが作成されます。
パッケージの追加 – petry add
https://python-poetry.org/docs/cli/#add
poetry add xxxx
で追加します。今回はdjango
をインストールしてみましょう。
$ poetry add django
pyproject.toml
を確認すると、django
が追加されていることが確認できます。
[tool.poetry]
name = "python-poetry"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
[tool.poetry.dependencies]
python = "^3.10"
Django = "^4.0.4"
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
また、開発環境用のパッケージの場合は引数に--dev
を追加します。
$ poetry add --dev flake8 autopep
仮想環境に入る – poetry shell
仮想環境に入る場合にはpoetry shell
を行います。
$ poetry shell
Spawning shell within C:\Users\User1\AppData\Local\pypoetry\Cache\virtualenvs\python-poetry-MzFusAM8-py3.10
django
のプロジェクトを作成してみましょう。
django-admin startproject config .
を実行します。
$ django-admin startproject config .
プロジェクトファイルが生成されました。
仮想環境からコマンドを実行する – poetry run
前述では、poetry shell
で仮想環境に入ってからコマンドを実行しましたが、shell
からではなく直接実行することも可能です。poetry run
で実行できます。
$ poetry run django-admin startapp app1
むしろこっちの使い方が楽ですね。
poetryの主なコマンド
requirements.txt
の書き出し – poetry export
https://python-poetry.org/docs/cli/#export
requirements.txt
ファイルを作成したい場合には
poetry export -f requirements.txt --output requirements.txt
とします。すると全ての依存関係が記載されているrequirements.txt
ファイルが生成されます。
asgiref==3.5.0; python_version >= "3.8" \
--hash=sha256:88d59c13d634dcffe0510be048210188edd79aeccb6a6c9028cdad6f31d730a9 \
--hash=sha256:2f8abc20f7248433085eda803936d98992f1343ddb022065779f37c5da0181d0
django-environ==0.8.1; python_version >= "3.4" and python_version < "4" \
--hash=sha256:6f0bc902b43891656b20486938cba0861dc62892784a44919170719572a534cb \
--hash=sha256:42593bee519a527602a467c7b682aee1a051c2597f98c45f4f4f44169ecdb6e5
django==4.0.4; python_version >= "3.8" \
--hash=sha256:07c8638e7a7f548dc0acaaa7825d84b7bd42b10e8d22268b3d572946f1e9b687 \
--hash=sha256:4e8177858524417563cc0430f29ea249946d831eacb0068a1455686587df40b5
sqlparse==0.4.2; python_version >= "3.8" \
--hash=sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d \
--hash=sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae
tzdata==2022.1; sys_platform == "win32" and python_version >= "3.8" \
--hash=sha256:238e70234214138ed7b4e8a0fab0e5e13872edab3be586ab8198c407620e2ab9 \
--hash=sha256:8b536a8ec63dc0751342b3984193a3118f8fca2afe25752bb9b7fffd398552d3
現在のプロジェクトからパッケージをインストール – poetry install
pip install -r requirements.txt
みたいな感じですね。
https://python-poetry.org/docs/cli/#install
$ poetry install
開発環境用のパッケージをインストールしたくない場合には--no-dev
を追加します。
$ poetry install --no-dev
パッケージ一覧を確認 – poetry show
https://python-poetry.org/docs/cli/#show
$ poetry show
asgiref 3.5.0 ASGI specs, helper code, and adapters
django 4.0.4 A high-level Python web framework that encourages rapid development and clean, pragmatic design.
django-environ 0.8.1 A package that allows you to utilize 12factor inspired environment variables to configure your Django application.
sqlparse 0.4.2 A non-validating SQL parser.
tzdata 2022.1 Provider of IANA time zone data
パッケージの削除 – poetry remove django
https://python-poetry.org/docs/cli/#remove
$ poetry remove django
これからどんどん使っていこうと思います!!
コメント