bazel-contrib / bazel-contrib/rules_python

allow py_zipapp to not include the python runtime

Aperta
#3,805 5 commenti 0 reazioni 0 assegnatari Vedi su GitHub
core-rules type: feature request
Lingua principale
Starlark
Stelle
688
Fork
721
Merge medio
15h 7m
PR unite (30g)
76

Descrizione

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.

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Start at the py_zipapp implementation and inspect its venv layout and runtime-file depsets. Compare the existing bootstrap logic with runtime_env_toolchain behavior, then establish which external-runtime option is supported and verify that the resulting zipapp runs without bundled runtime files.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
build-system
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Attiva
Chiarezza
Da chiarire
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.