You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
packaging 26.3 breaks disabling of source-package constraints (Requirement() now rejects trailing newline) #100
With packaging==26.3 (released 2026-08-04), mxdev no longer comments out constraints for packages declared as sources. The pin survives into constraints-mxdev.txt, and installation then fails because the editable source (a different version) masks the index:
× No solution found when resolving dependencies:
╰─▶ Because there is no version of edutap-wallet-apple==1.0.0a3 and
you require edutap-wallet-apple==1.0.0a3, we can conclude that your
requirements are unsatisfiable.
Any CI that installs mxdev fresh (unpinned toolchain) went red the moment packaging 26.3 hit PyPI. mxdev 5.4.0, identical inputs:
The bare except Exception: pass swallows it, so the line is silently treated as "not a source package".
Suggested fix
parsed = Requirement(line.strip()) — and possibly log a warning instead of passing silently, so the next parser-behavior change surfaces instead of producing downstream resolver errors.
Confirmed. Root cause verified in src/mxdev/processing.py line 125 (process_line()): the raw line — still carrying its trailing newline from file iteration in process_io() — is passed to packaging.requirements.Requirement. packaging 26.3's stricter parser raises InvalidRequirement on the trailing whitespace, and the bare except Exception: pass (lines 126-127) swallows it, so the line is treated as not-a-requirement and never matched against the configured source packages. The other two Requirement() call sites (uv.py:53, config.py:98) already parse stripped strings and are not affected. The existing tests only pass lines without trailing newlines, which is why the suite never caught this.
Activity
jensens commentedon Aug 4, 2026
Confirmed. Root cause verified in
src/mxdev/processing.pyline 125 (process_line()): the raw line — still carrying its trailing newline from file iteration inprocess_io()— is passed topackaging.requirements.Requirement. packaging 26.3's stricter parser raisesInvalidRequirementon the trailing whitespace, and the bareexcept Exception: pass(lines 126-127) swallows it, so the line is treated as not-a-requirement and never matched against the configured source packages. The other twoRequirement()call sites (uv.py:53,config.py:98) already parse stripped strings and are not affected. The existing tests only pass lines without trailing newlines, which is why the suite never caught this.Fix #100: strip lines before parsing with Requirement()
Update CHANGES.md for #100
Fix #100: strip lines before parsing with Requirement() (#101)