bazel-contrib / bazel-contrib/rules_python
allow py_zipapp to not include the python runtime
- Lenguaje dominante
- Starlark
- Estrellas
- 688
- Forks
- 721
- Merge medio
- 15 h 7 min
- PR fusionados (30 d)
- 76
Descripción
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.
Guía de contribución
Línea de trabajo
Comienza por la implementación de py_zipapp e inspecciona su disposición de venv y los depsets de archivos de runtime. Compara la lógica de bootstrap existente con el comportamiento de runtime_env_toolchain; después, determina qué opción de runtime externo es compatible y verifica que la zipapp resultante se ejecute sin archivos de runtime incluidos.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- build-system
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Activo
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 35/100