You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@thrift.apache.org by "Jens Geyer (Jira)" <ji...@apache.org> on 2026/06/06 16:37:00 UTC

[jira] [Resolved] (THRIFT-6067) Python: pip install fails on setuptools < 69 due to sys.exit() in setup.py (PEP 517 build backend)

     [ https://issues.apache.org/jira/browse/THRIFT-6067?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jens Geyer resolved THRIFT-6067.
--------------------------------
      Assignee: Vikrant Puppala
    Resolution: Fixed

> Python: pip install fails on setuptools < 69 due to sys.exit() in setup.py (PEP 517 build backend)
> --------------------------------------------------------------------------------------------------
>
>                 Key: THRIFT-6067
>                 URL: https://issues.apache.org/jira/browse/THRIFT-6067
>             Project: Thrift
>          Issue Type: Bug
>          Components: Python - Library
>    Affects Versions: 0.23.0
>            Reporter: Vikrant Puppala
>            Assignee: Vikrant Puppala
>            Priority: Major
>             Fix For: 0.24.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> thrift ships sdist-only (no wheels on PyPI for any version), so every install builds lib/py/setup.py via pip's PEP 517 in-process backend.
> setup.py calls sys.exit(0) on its build success paths. setuptools' build_meta.run_setup() executes setup.py with exec(). On setuptools < 69 the resulting SystemExit propagates and terminates the build-backend subprocess before it writes the result file pip expects:
>       ERROR: Could not install packages due to an OSError:
>       [Errno 2] No such file or directory: '.../output.json'
> setuptools >= 69 added a try/except SystemExit in run_setup that swallows exit code 0 (emitting a SetuptoolsDeprecationWarning advising against sys.exit() in setup.py; see https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html). So the failure only manifests on older toolchains.
> Impact: any environment shipping setuptools < 69 cannot install thrift 0.23.0. This broke installs on long-lived runtime images that bundle setuptools 68.
> Origin: the sys.exit() calls were introduced incidentally in commit a715bdff (PR #3330, "THRIFT-5923: UUID python", 2025-10-30) with no rationale in the commit message, PR description, or review comments. The setup.py prior to that commit used plain try/except control flow with no sys.exit() and built correctly on all setuptools versions.
> Fix: restore the pre-#3330 control flow (try the C-extension build; on BuildFailed, fall back to the pure-Python build; let any remaining failure propagate). No sys.exit() in setup.py. Behavior for consumers is unchanged.
> PR: https://github.com/apache/thrift/pull/3584
> Related: THRIFT-5915 / PR #3007 (distutils -> setuptools migration).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)