bazel-contrib / bazel-contrib/rules_python
Support importing across repos with bzlmod
- 主要言語
- Starlark
- スター
- 688
- フォーク
- 721
- 平均マージ
- 15時間 7分
- マージ済み PR(30日)
- 76
説明
# 🚀 feature request
### Relevant Rules
`py_library` / `py_binary`
### Description
If there is a python library `@foo//bar:baz`, how can I import it from the main repository?
Pre-bzlmod, you could write `from foo.bar import baz`, as it would be in the directory `external/foo/bar/baz`, and the external directory was in your python path. Apparently this was not documented or intended, but nevertheless, people used it, as I don't believe it was ever considered when writing rules_python.
In bzlmod, however, you have repo mapping, where the directory `foo` is actually stored at `external/_main~~foo_ext~foo`, and thus `from foo.bar import baz` fails. This is the direct cause of #1679, and if we solve this, we fix that bug for free.
### Describe the solution you'd like
I'd personally like to make users prefix their imports to external repositories with the name of the workspace (based on the repo mapping). This would allow two python files in different repositories to `import foo.bar.baz` and each get their own `@foo` in the case of a repo name clash (this is how repo mapping is intended to be used, to allow each repo to have their own namespace of repos).
I previously achieved this in ChromeOS via a `sitecustomize.py` (see discussion in #1679).
### Describe alternatives you've considered
I can't really think of a viable alternative. Any solution without including the repo name in the import seems like it will end up in painful corner cases where you have name conflicts.
コントリビューションガイド
調査の方向性
まず #1679 の議論と、そこで参照されている sitecustomize.py のアプローチを読んでください。リポジトリ間の Python のインポート名を、名前の衝突を含めて bzlmod の repo mapping でどのように決定すべきかを明確にしてください。要求されたリポジトリ間のインポートをサポートし、報告された失敗を解決する、合意済みで文書化された実装方針が決まれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- build-system
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 停滞
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 25/100