bazel-contrib / bazel-contrib/rules_python

Stop adding repos to sys.path (set experimental_python_import_all_repositories to false)

オープン
#2,943 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
cleanup core-rules
主要言語
Starlark
スター
688
フォーク
721
平均マージ
15時間 7分
マージ済み PR(30日)
76

説明

Right now, repo roots are added to sys.path. This is problematic for a variety of reasons

* It causes the repos with external pip deps to end up on sys.path, which are just spam and just cause problems.
* For the main repo and other external repos, they should be using the `imports` attribute on their public targets instead.

The situation is a bit complicated because the flag (and its default) are defined in bazel, while the implementation is in rules_python. Also, there's a decent reliance on this behavior in the broader ecosystem because it's been around for a long time, even though it was never a good idea to rely on it. With the advent of bzlmod, the reliance would only get worse (adding repo roots to path is helpful under bzlmod).

I think the venv site-packages work we've done will help this problem -- it allows mapping an arbitrary directory into site-packages, which should make materializing external repos under arbitrary names more flexible.

I think the steps needed are:
1. [ ] Add a flag in rules_python to replace the bazel-builtin one.
2. [ ] Let bazel remove their flag when appropriate. Note that doing this will force users to upgrade to a version of rules_python with (1)
3. [ ] Disable adding repo roots for pip-generated repos. Do this by adding a marker file in the repo root (under the hood, these repos are added by doing listdir() on the runfiles root)
4. [ ] Add an allowlist for which external repos are added to sys.path. We don't control non-pip repos, so need another mechanism to specify this. A flag that points to a target with repo names to allow being added onto sys.path is good compromise.
5. [ ] Disable the behavior by default; users can use the allowlist to aid migration.
6. [ ] Eventually remove the allowlist.

The old builtin flag (`--foo`) can be mapped to the new repo-flag (`--@bla//:foo`) using `--flag_alias`

This is the rules_python side of https://github.com/bazelbuild/bazel/issues/2636

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

まず、リンクされている Bazel issue を読み、Bazel での flag の定義方法と rules_python での実装方法を追跡します。置き換え用の flag、pip-repository マーカー、allowlist を含む 6 つの移行手順に取り組みます。デフォルトで repo roots が追加されなくなり、allowlist が移行をサポートすれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
build-system
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
30/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。