pyproject.tomlからPoetry installする仕組み

Ubuntu Python 分析環境の構築 3/N

公開日: 2023-07-31
更新日: 2024-04-18

  Table of Contents

Poetry install

  • poetry installコマンドは, 現在のプロジェクトのpyproject.tomlから依存関係を解決しながらpackageを仮想環境へセットアップするコマンドです.
  • poetry.lockが存在する場合は, そこに記載されたversionを読み込む形で仮想環境セットアップが行われます.

Project repositoryのインストール

pyproject.tomlが現在のプロジェクトで以下のように設定されているとします.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["Sébastien Eustace <sebastien@eustace.io>"]
readme = "README.md"
packages = [{include = "poetry_demo"}]

[tool.poetry.dependencies]
python = "^3.7"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Poetryは, プロジェクトのルートに tool.poetry.nameと同じ名前のパッケージ(上の例ではpoetry-demoディレクトリ)を含むと想定しています. そのため, poetry installを実行するとき, poetry-demoディレクトリの中身はパッケージとして仮想環境にインストールされます.

一方, poetry-demoディレクトリが存在しない場合は, poetry install --no-rootでインストールするべきとの警告が出現します.

groupからパッケージをインストールする場合

  • 特定のグループを除外して読み込む場合
  • 特定のグループを明示的に指定してmainグループと一緒に読み込む場合
  • 特定のグループのみを読み込む場合

それぞれのパターンがあります

1
2
3
4
5
6
7
8
# 特定のグループを除外して読み込む場合
poetry install --without test,docs --sync

# 特特定のグループを明示的に指定してmainグループと一緒に読み込む場合
poetry install --with test,docs --sync

# 特定のグループのみを読み込む場合
poetry install --only test,docs --sync

--sync optionは選択したグループとpoetry.lockの記載内容の整合性を整えるために使用されるオプションです.

プロジェクト配下に存在する特定のディレクトリをpoetry addする場合

tool.poetry.nameに記載されていない名前で, project root直下に存在するディレクトリについてインストール死体場面を考えます. 下の例では, utilities_dir以下に存在するrepository_utilitiesパッケージをインストールしたいとします.

1
2
3
4
5
6
7
8
9
.
├── docs
├── utilities_dir
│     └── repository_utilities
├── license
├── poetry.lock
├── pyproject.toml
├── README.md
└── poetry-demo

pyproject.tomlに以下のように記述することで, poetry installpoetry update実施後, repository_utilitiesを普通のモジュールと同じようにimportで呼ぶことができるようになります.

1
2
3
packages = [
    { include = "repository_utilities", from = "utilities_dir" }
]

GitHub private repositoryをpoetry addする場合

poetry addの方法として以下の2つが考えられます

  • https経由でpoetry add
  • ssh経由でpoetry add

また, 上記それぞれに対して特定のbranchを対象にしたい場合というケースの計4パターンが考えられます.

User kirbytest_repository レポジトリを加える場合を例にコマンド例を以下紹介します

1
2
3
4
5
6
7
8
9
10
11
# (1-a) https経由でmainをadd
% poetry add git+https://github.com/kirby/test_repository.git

# (1-b) https経由でdevelop branchをadd
% poetry add git+https://github.com/kirby/test_repository.git#develop

# (2-a) ssh経由でmainをadd
% poetry add git+ssh://git@github.com/kirby/test_repository.git

# (2-b) ssh経由でdevelop branchをadd
% poetry add git+ssh://git@github.com/kirby/test_repository.git#develop

上記のコマンドを実行すると,pyproject.toml

1
2
3
[tool.poetry.dependencies]
python = ">=3.11,<4.0"
test_repository = {git = "https://github.com/kirby/test_repository.git"}

という形でパッケージ情報が記載されます. または poetry show でdependencyを含め確認することもできます.

Repository先で更新が走った場合

レポジトリ先で更新が入った場合は, poetry updateで変更内容を 反映させることができます.

1
2
3
4
5
6
7
8
9
% poetry update
Updating dependencies
Resolving dependencies... (1.8s)

Package operations: 0 installs, 1 update, 0 removals

  - Updating test_repository (0.1.0 1cbd71e -> 0.1.0 083db26)

Writing lock file

References



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)