bazel-contrib / bazel-contrib/rules_python
allow py_zipapp to not include the python runtime
- 主要言語
- Starlark
- スター
- 688
- フォーク
- 721
- 平均マージ
- 15時間 7分
- マージ済み PR(30日)
- 76
説明
The gist of the feature request is to allow using py_zipapp to create a zipapp that doesn't include the python runtime. The reason is because the runtime is large, and if you're using e.g. docker to provide the runtime separately, then the bundled runtime is unwanted overhead.
Not including the runtime files is trivial: just don't include those depsets of files when creating the zip.
However, the resulting zip isn't functional. This is because, under the hood, a venv layout is used, which expects `bin/python` to point to the runtime. But if the runtime is being provided externally, it doesn't have a play to point to.
There's 3 options I can think of:
(1) Use runtime_env_toolchain. It has some hacks/tricks to use a shell script as bin/python, but still act as a venv interpreter. Its fragile though, relying on undocumented python behavior.
(2) Lookup python at runtime and recreate venv at runtime. The logic for this already exists in one of the bootstraps (not sure if its in the zip one, though).
(3a) Write a relative symlink that "escapes" the zip file tree. Then its up to the user to ensure that path exists and points to a usable python.
(3b) Write an absolute symlink, i.e. make use of the "platform interpreter" feature. Then it's up to the user to ensure that path exists and points to a usable python.
コントリビューションガイド
調査の方向性
py_zipapp の実装から始め、venv のレイアウトとランタイムファイルの depset を調べます。既存の bootstrap ロジックを runtime_env_toolchain の動作と比較し、どの外部ランタイムオプションがサポートされているかを確認してから、生成された zipapp がランタイムファイルをバンドルせずに実行できることを検証します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- build-system
- issue の種類
- 機能追加
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 活発さ
- 活発
- 明瞭さ
- 説明が足りない
- 初心者へのやさしさ
- 35/100