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
ci: Python pypy3.10 (KTLO) cannot install, since cryptography has no pp310 wheel past 46.0.3 #2040
Describe the bug Python pypy3.10 (KTLO) never runs a test: its install fails on every run, so the leg only proves that it fails. cryptography>=3.4 (the crypto extra, and all) resolves to 50.0.2. That release ships no pp310 wheel; the newest one that does is 46.0.3. So pip builds from the sdist, and the build stops at the configured PyPy interpreter version (3.10) is lower than PyO3's minimum supported version (3.11). Seen in run 39718608950.
Expected behavior
Since the leg is KTLO, it should install and run its tests.
Additional context Needs you: cap cryptography for old PyPy, or keep the leg as an allowlisted by-design failure (#2030 option 1)? My recommendation: cap it. Add cryptography>=3.4,<=46.0.3; platform_python_implementation == "PyPy" and python_version < "3.11" beside the current pin in crypto and all. That brings the leg back without touching any other interpreter.
3.7 needs no change: pytest>=8 needs Python 3.8, and pcapkit does not compile on 3.7 anyway (Compat Python 3.7 (KTLO)).
PyPy < 3.11: cap cryptography at <=46.0.3 in the crypto and all extras, the last release with pp310 wheels.
3.7: cap the test dependencies that have dropped 3.7, starting with pytest>=8 (which needs Python 3.8 or later), so Python 3.7 (KTLO) can install. I'll also look at whether Compat Python 3.7 (KTLO)'s compile failure comes from BPC, and report what I find here before changing anything there.
Part 1: cap it. That's #2046, with one correction to my earlier suggestion. Only 45.0.7 and older ship a manylinuxpp310 wheel; 46.0.0–46.0.3 have them for macOS and Windows only. So the cap is <46, not <=46.0.3.
Part 2: 3.7. Capping the test deps (pytest>=7,<8, pytest-xdist<3.6.1) would make the install succeed on a real 3.7.16. But pcapkit still can't be imported, so no test would run, and BPC never runs on either 3.7 leg:
Both legs install editable (pip install -e .). setuptools 68's editable path converts nothing, so import pcapkit hits the raw source. The first SyntaxError is the walrus in extraction.py. Compat's compileall also reads the unconverted checkout.
Running setup.py's refactor() steps by hand (walrus, then poseur) still leaves modules that fail to compile:
bpc-poseur 0.4.3.post1 crashes on most files.
Its parso~=0.6.0 pin makes walrus reject valid 3.8 grammar.
Some 3.8-only syntax has no converter at all: the unparenthesized annotated tuples in the generated ftp/command.py, ftp/return_code.py and pcapng/option_type.py, and return carrier, tcp, *segment in toolkit/scapy.py.
Relaxing the xdist floor would also undo the conftest xdist fix that the floor exists for.
(b) Cap the test deps anyway: the leg installs, then fails at import.
(c) Make 3.7 real. That needs a non-editable or converting install on that leg, an upstream poseur fix plus lifting its parso pin, and parenthesizing those constructs, including in the vendor generators. I'd file this as its own issue.
Feasible: about 4–6 days of work, which buys CI coverage only until 2027-04-17. That is when ubuntu-22.04 goes fully unsupported (actions/runner-images#14254), and setup-python ships 3.7.17 only for Linux 20.04/22.04 and darwin. The checks below were run on a real 3.7.16 unless marked.
Lifting poseur's parso~=0.6.0 pin to 0.8.7 passes the poseur, walrus and bpc-utils suites and converts every pcapkit module.
After that, 4 modules still fail to compile: the 3 generated const files and toolkit/scapy.py. Parenthesizing them, generators included, fixes it.
Runtime:import pcapkit, extraction and dumps work once these are shimmed:
reversed(dict)
importlib.metadata, which adds an importlib_metadata dependency
typing.get_origin/get_args
logging stacklevel=
threading.excepthook
an IPv4Interface subclass clash
Still failing on 3.7: three behaviours with unknown cause: a RecursionError at 64 layers, a ToS ambiguity, and missing ext-chain warnings.
Tests: they need conversion too, plus backports of addClassCleanup and mock.call_args.args. After that, 59 library-facing failures remain only on 3.7, and the meta tests must be skipped there.
Install: editable installs never convert. The leg would need a conversion step before pip install -e.
Already shipping: today a 3.7 sdist build exits 0 but produces a wheel where 17 modules don't compile, because both BPC tools exit 0 on failure.
Needs you:
(a) Recommended: keep 3.7 as a by-design install failure, but make it fail loudly. refactor() in setup.py would compile each converted file and stop on SyntaxError, so 3.7 users get an error instead of a package that won't import. Separately, consider merging poseur#21 and relaxing its parso pin upstream.
(a′) The same, but raise requires-python to >=3.8 instead. This is a public-contract change.
(b) Full revival: the 4–6 days above, plus permanent upkeep. Every new 3.8+ construct or API would need a converter or a compat.py gate.
Recorded: 1.5.0 requires Python 3.8+ and drops BPC. That work is tracked in #2051, with one sub-question there: whether to drop the 3.7 KTLO legs. A worker is starting on the rest now. This issue stays open only for the stale pypy3.10EXPECTED entry, which I'll remove once main's pypy3.10 (KTLO) leg installs with #2046's cap.
Activity
JarryShaw commentedon Oct 22, 2026
cap it.
and for 3.7, if possible, we should cap it as well. I think the compat issue was with BPC.
JarryShaw commentedon Oct 22, 2026
On it. Two parts:
cryptographyat<=46.0.3in thecryptoandallextras, the last release withpp310wheels.pytest>=8(which needs Python 3.8 or later), soPython 3.7 (KTLO)can install. I'll also look at whetherCompat Python 3.7 (KTLO)'s compile failure comes from BPC, and report what I find here before changing anything there.A worker is on it now. The PR will follow.
JarryShaw commentedon Oct 22, 2026
Part 1: cap it. That's #2046, with one correction to my earlier suggestion. Only 45.0.7 and older ship a manylinux
pp310wheel; 46.0.0–46.0.3 have them for macOS and Windows only. So the cap is<46, not<=46.0.3.Part 2: 3.7. Capping the test deps (
pytest>=7,<8,pytest-xdist<3.6.1) would make the install succeed on a real 3.7.16. But pcapkit still can't be imported, so no test would run, and BPC never runs on either 3.7 leg:pip install -e .). setuptools 68's editable path converts nothing, soimport pcapkithits the raw source. The firstSyntaxErroris the walrus inextraction.py. Compat'scompileallalso reads the unconverted checkout.setup.py'srefactor()steps by hand (walrus, then poseur) still leaves modules that fail to compile:parso~=0.6.0pin makes walrus reject valid 3.8 grammar.ftp/command.py,ftp/return_code.pyandpcapng/option_type.py, andreturn carrier, tcp, *segmentintoolkit/scapy.py.Needs you:
fix(deps): cap cryptography below 46 on PyPy older than 3.11 (#2040) (#…
JarryShaw commentedon Oct 22, 2026
okay take (a) then. 3.7 has been EOL for too long. not worthy to fix for it.
4 remaining items
JarryShaw commentedon Oct 22, 2026
Feasible: about 4–6 days of work, which buys CI coverage only until 2027-04-17. That is when
ubuntu-22.04goes fully unsupported (actions/runner-images#14254), and setup-python ships 3.7.17 only for Linux 20.04/22.04 and darwin. The checks below were run on a real 3.7.16 unless marked.parso~=0.6.0pin to 0.8.7 passes the poseur, walrus and bpc-utils suites and converts everypcapkitmodule.toolkit/scapy.py. Parenthesizing them, generators included, fixes it.import pcapkit, extraction and dumps work once these are shimmed:reversed(dict)importlib.metadata, which adds animportlib_metadatadependencytyping.get_origin/get_argslogging stacklevel=threading.excepthookIPv4Interfacesubclass clashRecursionErrorat 64 layers, a ToS ambiguity, and missing ext-chain warnings.addClassCleanupandmock.call_args.args. After that, 59 library-facing failures remain only on 3.7, and the meta tests must be skipped there.pip install -e.Needs you:
refactor()insetup.pywould compile each converted file and stop onSyntaxError, so 3.7 users get an error instead of a package that won't import. Separately, consider merging poseur#21 and relaxing its parso pin upstream.requires-pythonto>=3.8instead. This is a public-contract change.compat.pygate.JarryShaw commentedon Oct 22, 2026
Alright, let's bump to 3.8+ then. BPC is no longer maintained. And this is what v1.5.0 is targeting for, a full turn to 3.8+.
JarryShaw commentedon Oct 22, 2026
Recorded: 1.5.0 requires Python 3.8+ and drops BPC. That work is tracked in #2051, with one sub-question there: whether to drop the 3.7 KTLO legs. A worker is starting on the rest now. This issue stays open only for the stale
pypy3.10EXPECTEDentry, which I'll remove once main'spypy3.10 (KTLO)leg installs with #2046's cap.build!: require Python 3.8+ and drop the BPC conversion (#2051)
build!: require Python 3.8+ and drop the BPC conversion (#2051)
build!: require Python 3.8+ and drop the BPC conversion (#2051)