uvloop (pulled in by uvicorn[standard]) cannot build on Android/Termux because libuv's ./configure script fails on the non-FHS Bionic layout. This bricks `pip install -e '.[termux]'` and `hermes update` on every Android device. Decompose `uvicorn[standard]` in core dependencies: - Keep `uvicorn` (without [standard]) as a core dep - Add `httptools` and `watchfiles` directly (both build cleanly on Android with ANDROID_API_LEVEL set) - Gate `uvloop` behind a new `[uvloop]` optional extra - Include `[uvloop]` in `[all]` so desktop/server installs retain the performance benefit automatically - Omit `[uvloop]` from `[termux]` and `[termux-all]` Also update the `[web]` extra to use plain `uvicorn` (without [standard]) since httptools/watchfiles are now core deps — this prevents `[termux-all]` (which includes `[web]`) from re-introducing the uvloop dependency. Update constraints-termux.txt with documentation explaining the uvloop exclusion rationale. uvicorn falls back to the stdlib asyncio event loop when uvloop is absent — no hermes codepath requires uvloop specifically. Tested on: Termux 0.119 / Android 10 / aarch64 / Python 3.13.12 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
23 lines
845 B
Plaintext
23 lines
845 B
Plaintext
# Termux / Android dependency constraints for Hermes Agent.
|
|
#
|
|
# Usage:
|
|
# python -m pip install -e '.[termux]' -c constraints-termux.txt
|
|
#
|
|
# These pins keep the tested Android install path stable when upstream packages
|
|
# move faster than Termux-compatible wheels / sdists.
|
|
#
|
|
# NOTE: uvloop is excluded from the Termux install path because libuv's
|
|
# ./configure script does not run on Android (non-FHS layout, bionic libc).
|
|
# uvicorn falls back to the stdlib asyncio event loop automatically when
|
|
# uvloop is absent — no performance-critical codepath depends on it.
|
|
# The [uvloop] optional extra is included in [all] but intentionally omitted
|
|
# from [termux] and [termux-all]. See pyproject.toml for details.
|
|
|
|
ipython<10
|
|
jedi>=0.18.1,<0.20
|
|
parso>=0.8.4,<0.9
|
|
stack-data>=0.6,<0.7
|
|
pexpect>4.3,<5
|
|
matplotlib-inline>=0.1.7,<0.2
|
|
asttokens>=2.1,<3
|