bb15b750fb
复用现有 Docker 和 Nuitka 流程,隔离架构镜像并支持 aarch64 标签。已通过 47 项测试、代码及文档门禁,并完成 Python 3.10 ARM64 wheel 构建、隔离导入与内容审计。
56 lines
2.4 KiB
Docker
56 lines
2.4 KiB
Docker
# manylinux_2_28: modern glibc baseline with binary wheels for numpy/scipy/opencv.
|
|
# Prefer this over manylinux2014 — recent NumPy requires GCC >= 10.3 and will try
|
|
# (and fail) to build from source on the older image.
|
|
ARG MANYLINUX_ARCH=x86_64
|
|
FROM quay.io/pypa/manylinux_2_28_${MANYLINUX_ARCH}:latest
|
|
|
|
ENV PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
|
PIP_ROOT_USER_ACTION=ignore \
|
|
ORISYS_WHEELHOUSE_ROOT=/opt/orisys-wheelhouse
|
|
|
|
# Per-ABI build tooling plus a per-ABI wheelhouse of every package the release
|
|
# flow installs at build time:
|
|
#
|
|
# * build tooling - nuitka/auditwheel etc. baked in, so the entrypoint does
|
|
# not have to re-resolve them from PyPI on every container start
|
|
# (ORISYS_UPDATE_BUILD_TOOLS=1 opts back in to that).
|
|
# * wheelhouse - `build/wheel/build.py --target pypi-linux` force-enables
|
|
# verification, which creates a throwaway venv and pip-installs the built
|
|
# wheel plus its declared runtime deps. Runtime deps are deliberately NOT
|
|
# installed into the image interpreter (users get them from the wheel
|
|
# metadata), so without a wheelhouse every build re-downloaded
|
|
# numpy/scipy/opencv/numba — roughly 200 MB, three times over, once per ABI.
|
|
# The entrypoint points pip at the wheelhouse with
|
|
# PIP_NO_INDEX/PIP_FIND_LINKS, which keeps the venv isolated and still
|
|
# exercises real dependency resolution, just without the network.
|
|
#
|
|
# --only-binary=:all: makes a missing wheel a loud image-build failure instead of
|
|
# a slow source build inside the container.
|
|
RUN set -eux; \
|
|
for TAG in cp310-cp310 cp311-cp311 cp312-cp312; do \
|
|
PYBIN="/opt/python/${TAG}/bin"; \
|
|
echo "=== build tooling for ${TAG} ==="; \
|
|
"${PYBIN}/python" -m pip install --upgrade pip setuptools wheel; \
|
|
"${PYBIN}/python" -m pip install \
|
|
"nuitka>=2.0" \
|
|
ordered-set \
|
|
zstandard \
|
|
auditwheel; \
|
|
echo "=== wheelhouse for ${TAG} ==="; \
|
|
"${PYBIN}/python" -m pip download \
|
|
--only-binary=:all: \
|
|
--dest "${ORISYS_WHEELHOUSE_ROOT}/${TAG}" \
|
|
pip \
|
|
setuptools \
|
|
wheel \
|
|
auditwheel \
|
|
numpy \
|
|
scipy \
|
|
opencv-python \
|
|
numba; \
|
|
done; \
|
|
du -sh "${ORISYS_WHEELHOUSE_ROOT}"/*
|
|
|
|
WORKDIR /src
|
|
ENTRYPOINT ["/bin/bash", "/src/build/wheel/docker/entrypoint.sh"]
|