- Updated `install-service.sh` to source `scripts/armv7_pip_args.sh`, ensuring consistent handling of pip arguments for 32-bit ARM hosts.
- Enhanced `constraints-armv7.txt` to clarify the need for specific package versions to avoid installation issues (issue #269).
- Modified `README.md` to document the application of piwheels index and constraints during installation on 32-bit ARM systems.
- Added tests to verify the correct integration of the ARMv7 pip arguments helper and its behavior across different architectures.
Ten dependencies publish no prebuilt armv7 wheel on PyPI (PyNaCl,
pycryptodome, ephem, pyephem, brotli, cffi, MarkupSafe, librt,
backports.zstd, sgmllib3k) and compiled from source on 32-bit ARM. On a
Raspberry Pi 2 that is hours of work and a likely OOM at 1 GB RAM, and in
CI it meant recompiling them under QEMU on every arm/v7 build.
piwheels supplies prebuilt armv7 wheels for those packages. The remaining
two gaps are version skew rather than missing builds: pip prefers the
newest release across indexes, and for brotli and ephem the newest PyPI
release is one step ahead of piwheels' current cp311 build. Holding those
two one version back lets the whole set resolve to wheels.
Measured in a linux/arm/v7 container against requirements.txt:
PyPI only ............................ 10 compiled from source
+ piwheels extra-index-url ........... 2 compiled from source
+ constraints-armv7.txt .............. 0 compiled - 75/75 wheels
No other package is held back; cryptography, aiohttp, pycryptodome and
PyNaCl all resolve to current releases.
- constraints-armv7.txt: the two pins, with measurements and a command to
re-check them as piwheels catches up. platform_machine markers make the
file a no-op if applied off-ARM.
- install-service.sh: configure_armv7_pip_args, gated on uname -m and
wired into both pip call sites. Warns rather than fails if the
constraints file is absent.
- Dockerfile: same treatment for the linux/arm/v7 leg only, via
TARGETPLATFORM. amd64 and arm64 keep resolving from PyPI alone.
- config.ini.pi2-example: document what to do per install method.
Verified: arm/v7 builder stage completes in 2:49 with zero source builds;
amd64 builder stage unaffected with zero piwheels downloads; arch gating
exercised for x86_64, aarch64 and armv7l; 73 config tests pass.
Note that piwheels is now an additional trusted index on the arm/v7 leg
and on 32-bit ARM native installs.