use distlib inside the zipapp docker image

This commit is contained in:
Anthony Sottile 2023-05-17 18:55:11 -04:00
parent a0a734750e
commit 18348f5d0d
2 changed files with 13 additions and 7 deletions

View file

@ -1,4 +1,4 @@
FROM ubuntu:focal
FROM ubuntu:jammy
RUN : \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
@ -11,4 +11,4 @@ RUN : \
ENV LANG=C.UTF-8 PATH=/venv/bin:$PATH
RUN : \
&& python3 -mvenv /venv \
&& pip install --no-cache-dir pip setuptools wheel no-manylinux --upgrade
&& pip install --no-cache-dir pip distlib no-manylinux --upgrade

View file

@ -4,7 +4,6 @@ from __future__ import annotations
import argparse
import base64
import hashlib
import importlib.resources
import io
import os.path
import shutil
@ -42,8 +41,15 @@ def _add_shim(dest: str) -> None:
with zipfile.ZipFile(bio, 'w') as zipf:
zipf.write(shim, arcname='__main__.py')
with tempfile.TemporaryDirectory() as tmpdir:
_exit_if_retv(
'podman', 'run', '--rm', '--volume', f'{tmpdir}:/out:rw', IMG,
'cp', '/venv/lib/python3.10/site-packages/distlib/t32.exe', '/out',
)
with open(os.path.join(dest, 'python.exe'), 'wb') as f:
f.write(importlib.resources.read_binary('distlib', 't32.exe'))
with open(os.path.join(tmpdir, 't32.exe'), 'rb') as t32:
f.write(t32.read())
f.write(b'#!py.exe -3\n')
f.write(bio.getvalue())