コンテンツにスキップ

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

依存関係の表示

dependenciesコマンドで今のプロジェクトがどこに依存しているか分かる。--changed-dependees=transitiveで依存先がさらに依存しているところを表示できる。 以下は pants が出してる Python のサンプルレポジトリで実行した結果。

1
2
3
4
5
6
pants dependencies helloworld/: --changed-dependees=transitive

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

dependeesコマンドでどこに依存されてるかが分かる。

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

参考