From 28293c63400e92433dec476e991540c3f09ac63c Mon Sep 17 00:00:00 2001 From: "alexei.dolgolyov" Date: Tue, 7 Apr 2026 22:29:29 +0300 Subject: [PATCH] fix(ci): replace uvicorn[standard] with explicit extras for cross-build uvicorn[standard] pulls uvloop via a 'sys_platform != win32' marker. pip evaluates env markers against the HOST (Linux in CI), so uvloop is requested even in a --platform win_amd64 resolve. No uvloop wheel exists for Windows, so pip backtracks across every uvicorn[standard] version and fails with ResolutionImpossible. Use plain uvicorn plus the Windows-compatible extras we actually need (httptools, websockets, python-dotenv). --- build-dist-windows.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/build-dist-windows.sh b/build-dist-windows.sh index e6b3e5d..e17d39f 100644 --- a/build-dist-windows.sh +++ b/build-dist-windows.sh @@ -40,9 +40,18 @@ echo '..\app' >> "$PTH_FILE" echo "Downloading Windows wheels..." # Core dependencies +# NOTE: uvicorn[standard] pulls in uvloop via `sys_platform != 'win32'` marker. +# pip evaluates env markers against the HOST (Linux in CI), so uvloop is +# requested, but `--platform win_amd64 --only-binary :all:` cannot find a +# Windows wheel for uvloop (none exist). Result: pip backtracks across every +# uvicorn[standard] version and ResolutionImpossible. Fix: use plain uvicorn +# and list only the Windows-compatible standard extras we actually need. CORE_DEPS=( "fastapi>=0.109.0" - "uvicorn[standard]>=0.27.0" + "uvicorn>=0.27.0" + "httptools>=0.5.0" + "websockets>=10.4" + "python-dotenv>=0.13" "pydantic>=2.0" "pydantic-settings>=2.0" "pyyaml>=6.0"