Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "Known edge case" section covers 32-bit Windows, but psutil dropped 32-bit Linux (i686) wheels on the same boundary — and 32-bit Linux is a platform this package explicitly serves.
Evidence — wheel platform tags on PyPI:
browserstack/local_binary.py:17,31-34computesis_64bits = sys.maxsize > 2**32and downloadsBrowserStackLocal-linux-ia32for 32-bit interpreters, so 32-bit Linux is a first-class target here. Windows, by contrast, has no bitness branch at all (local_binary.py:36→ a singleBrowserStackLocal.exe). With the cap removed, a fresh install on a 32-bit Linux interpreter resolves psutil 7.2.2 and must compile it from sdist (gcc + Python headers) where 6.1.1/7.0.0 supplied a wheel — a minimal CI image without a toolchain fails the install outright.Worth adding the flip side to the description as well: 7.2.2 gains musllinux wheels (x86_64 + aarch64) that 6.1.1 lacked entirely, so Alpine users (
local_binary.py:26→BrowserStackLocal-alpine) go from an sdist build to a wheel. Net wheel coverage improves for a supported platform.Fix — either extend the documented edge case to
win32 + linux i686and accept it knowingly, or scope the cap to 32-bit so wheel coverage is preserved everywhere:On "environment markers cannot reliably detect interpreter bitness" — markers do expose
platform_machine, which pip evaluates asi686on 32-bit Linux andx86for 32-bit CPython on Windows (a WOW64 process reportsPROCESSOR_ARCHITECTURE=x86). I haven't tested that resolution myself, andplatform_machinereflects the OS/WOW64 view rather thansys.maxsize, so worth apip install --dry-run --platform manylinux2014_i686check before relying on it.Question for author: was 32-bit Linux considered alongside win32, or did the wheel audit look only at the Windows set (the LOC-7228 customer is on Windows)?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch — answering your direct question first: the wheel audit only diffed the win32 set against 6.1.1/7.0.0 (the LOC-7228 customer was on Windows); i686 was not checked. You're right that it lost wheels on the same boundary, and unlike Windows, 32-bit Linux is a platform
local_binary.pyexplicitly branches for (is_64bits→BrowserStackLocal-linux-ia32).Re-verified your table against PyPI JSON:
Going with extending the documented edge case rather than the scoped marker, for the reason you already half-flagged:
platform_machinereflects the OS/WOW64 view, so a 32-bit CPython on a 64-bit kernel reportsx86_64and the marker wouldn't fire — while pip's wheel selection still follows interpreter bitness. That's arguably the more common 32-bit scenario today (i386 Docker images withoutlinux32personality), so the marker gives partial coverage in exchange for permanent resolver complexity on a shrinking platform. The failure mode it would guard is loud (compiler error at install time), not a silent runtime break.Also folded your flip side into the description: 7.2.2 adds musllinux wheels that 6.1.1 lacked, so Alpine (
BrowserStackLocal-alpine, also explicitly served) goes from sdist-build to wheel — net coverage improves for a supported platform.PR description updated to cover win32 + linux i686 + the Alpine improvement.