Pants を使ったモノレポで依存関係を調べる
依存関係の表示
dependencies
コマンドで今のプロジェクトがどこに依存しているか分かる。--changed-dependees=transitive
で依存先がさらに依存しているところを表示できる。 以下は pants が出してる Python のサンプルレポジトリで実行した結果。
| 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 にする時はサイズが大きくなる。注意が必要。
| [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 ライブラリの一覧を表示できる。
| 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
|
参考