コンテンツにスキップ

Pants を使ったモノレポで依存関係を調べる

Pants でモノレポの依存関係を調べる。

依存関係の表示

dependenciesは、指定したターゲットの依存先を表示する。依存先を再帰的にたどるには--transitiveを使う。一方、--changed-dependees=transitiveは変更の影響を受けるターゲットの選択に使うオプションで、依存先の表示範囲を広げるものではない。 以下は Pants が公開している Python のサンプルリポジトリで実行した結果。

1
2
3
4
5
6
pants dependencies helloworld/:

//:reqs#ansicolors
helloworld/__init__.py:lib
helloworld/greet/greeting.py:lib
helloworld/main.py:lib

逆に、dependeesは指定したターゲットに依存する側を表示する。依存関係の向きと--transitiveの使い方はPants の Project introspectionに例がある。

poetry の依存関係

次のようなpyproject.tomlと BUILD ファイルがあったら、dev-dependenciesを含んだ依存関係になるので、pex binary にする時はサイズが大きくなる。注意が必要。

1
2
3
4
5
6
7
[tool.poetry.dependencies]
python = "^3.8"
requests = {extras = ["security"], version = "~1"}
flask = "~1.12"

[tool.poetry.dev-dependencies]
isort = "~5.5"
# This will generate three targets:
#
#  - //:poetry#flask
#  - //:poetry#requests
#  - //:poetry#isort
poetry_requirements(name="poetry")

# The above target generator is spiritually equivalent to this:
python_requirement(
    name="requests",
    requirements=["requests[security]>=1,<2.0"],
)
python_requirement(
    name="flask",
    requirements=["flask>=1.12,<1.13"],
)
python_requirement(
    name="isort",
    requirements=["isort>=5.5,<5.6"],
)

リポジトリ内で使用されている Python ライブラリの一覧表示

peek コマンドを使ってリポジトリ内で使用されている Python ライブラリの一覧を表示できる。

1
2
3
4
5
6
7
pants peek --filter-target-type=python_requirement ::

# requirementsだけ抽出
pants peek --filter-target-type=python_requirement :: | jq '[ .[].requirements ]'

# requirements.txt に出力
pants peek --filter-target-type=python_requirement :: | jq '[ .[].requirements ] | flatten | unique | .[]' -r > requirements.txt

参考