Skip to content

ci: Python pypy3.10 (KTLO) cannot install, since cryptography has no pp310 wheel past 46.0.3 #2040

Closed

Description

@JarryShaw

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)).

Activity

  1. added
    bugIssues reporting a defect (set by the bug report template; a default, not an assessment)
    ciPull requests that change CI or workflow configuration (ci: subject prefix)
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 22, 2026
  2. moved this to Needs decision in PyPCAPKiton Oct 22, 2026
  3. JarryShaw commented on Oct 22, 2026

    @JarryShaw
    OwnerAuthor

    cap it.

    and for 3.7, if possible, we should cap it as well. I think the compat issue was with BPC.

  4. JarryShaw commented on Oct 22, 2026

    @JarryShaw
    OwnerAuthor

    On it. Two parts:

    • 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.

    A worker is on it now. The PR will follow.

  5. added
    wipWork in flight - a covering PR is open or an agent is actively on it
    and removed
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 22, 2026
  6. moved this from Needs decision to WIP in PyPCAPKiton Oct 22, 2026
  7. JarryShaw commented on Oct 22, 2026

    @JarryShaw
    OwnerAuthor

    Part 1: cap it. That's #2046, with one correction to my earlier suggestion. Only 45.0.7 and older ship a manylinux pp310 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.

    Needs you:

    • (a) Recommended: leave 3.7 failing at install by design. ci: post Unit Tests push runs to Discussions (#2030) #2036 already allowlists that annotation. Capping alone would only move the failure from install to import.
    • (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.
  8. added
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 22, 2026
  9. moved this from WIP to Needs decision in PyPCAPKiton Oct 22, 2026
  10. JarryShaw commented on Oct 22, 2026

    @JarryShaw
    OwnerAuthor

    okay take (a) then. 3.7 has been EOL for too long. not worthy to fix for it.

  11. 4 remaining items

  12. moved this from Needs decision to WIP in PyPCAPKiton Oct 22, 2026
  13. JarryShaw commented on Oct 22, 2026

    @JarryShaw
    OwnerAuthor

    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.

    • BPC:
    • 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.
  14. added
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 22, 2026
  15. moved this from WIP to Needs decision in PyPCAPKiton Oct 22, 2026
  16. JarryShaw commented on Oct 22, 2026

    @JarryShaw
    OwnerAuthor

    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+.

  17. JarryShaw commented on Oct 22, 2026

    @JarryShaw
    OwnerAuthor

    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.10 EXPECTED entry, which I'll remove once main's pypy3.10 (KTLO) leg installs with #2046's cap.

  18. removed
    needs: decisionWaiting on the maintainer to decide — not blocked by other work
    on Oct 22, 2026
  19. moved this from Needs decision to WIP in PyPCAPKiton Oct 22, 2026
  20. removed
    wipWork in flight - a covering PR is open or an agent is actively on it
    on Oct 22, 2026
  21. added this to the PyPCAPKit v1.5 milestone on Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIssues reporting a defect (set by the bug report template; a default, not an assessment)ciPull requests that change CI or workflow configuration (ci: subject prefix)

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions