Skip to content

Python 3.14 build failing for 3.1.1 #493

@OlegZv

Description

@OlegZv

Hello all! I found a few issues from last year that seem to have been fixed and closed (#473, #458) , but I'm still experiencing this compilation issue on 3.14 python. My python interpreter is installed by uv and is not free-threaded.

✗ uv run python -VV
Python 3.14.2 (main, Jan 27 2026, 23:32:07) [Clang 21.1.4 ]
Compilation Error ``` ➜ : ✗ uv sync Resolved 76 packages in 21ms × Failed to build `greenlet==3.1.1` ├─▶ The build backend returned an error ╰─▶ Call to `setuptools.build_meta.build_wheel` failed (exit status: 1)
  [stdout]
  running bdist_wheel
  running build
  running build_py
  copying src/greenlet/__init__.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/platform/__init__.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/tests/test_version.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_weakref.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/fail_slp_switch.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_gc.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/leakcheck.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/fail_switch_two_greenlets.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_generator.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_greenlet_trash.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_throw.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_tracing.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/fail_cpp_exception.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/fail_switch_three_greenlets.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_cpp.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_contextvars.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_greenlet.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_extension_interface.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/fail_clearing_run_switches.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/__init__.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/fail_switch_three_greenlets2.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/fail_initialstub_already_started.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_generator_nested.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_stack_saved.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/test_leaks.py -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  running egg_info
  writing src/greenlet.egg-info/PKG-INFO
  writing dependency_links to src/greenlet.egg-info/dependency_links.txt
  writing requirements to src/greenlet.egg-info/requires.txt
  writing top-level names to src/greenlet.egg-info/top_level.txt
  reading manifest file 'src/greenlet.egg-info/SOURCES.txt'
  reading manifest template 'MANIFEST.in'
  adding license file 'LICENSE'
  adding license file 'LICENSE.PSF'
  adding license file 'AUTHORS'
  writing manifest file 'src/greenlet.egg-info/SOURCES.txt'
  copying src/greenlet/CObjects.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/PyGreenlet.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/PyGreenlet.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/PyGreenletUnswitchable.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/PyModule.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TBrokenGreenlet.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TExceptionState.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TGreenlet.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TGreenlet.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TGreenletGlobals.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TMainGreenlet.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TPythonState.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TStackState.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TThreadState.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TThreadStateCreator.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TThreadStateDestroy.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/TUserGreenlet.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet_allocator.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet_compiler_compat.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet_cpython_add_pending.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet_cpython_compat.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet_exceptions.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet_internal.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet_refs.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet_slp_switch.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/greenlet_thread_support.hpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/slp_platformselect.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet
  copying src/greenlet/platform/setup_switch_x64_masm.cmd -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_aarch64_gcc.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_alpha_unix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_amd64_unix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_arm32_gcc.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_arm32_ios.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_arm64_masm.asm -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_arm64_masm.obj -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_arm64_msvc.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_csky_gcc.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_loongarch64_linux.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_m68k_gcc.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_mips_unix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_ppc64_aix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_ppc64_linux.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_ppc_aix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_ppc_linux.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_ppc_macosx.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_ppc_unix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_riscv_unix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_s390_unix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_sh_gcc.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_sparc_sun_gcc.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_x32_unix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_x64_masm.asm -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_x64_masm.obj -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_x64_msvc.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_x86_msvc.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/platform/switch_x86_unix.h -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/platform
  copying src/greenlet/tests/_test_extension.c -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  copying src/greenlet/tests/_test_extension_cpp.cpp -> build/lib.macosx-11.0-arm64-cpython-314/greenlet/tests
  running build_ext
  building 'greenlet._greenlet' extension
  c++ -fno-strict-overflow -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -O3 -arch arm64
  -mmacosx-version-min=11.0 -Wno-nullability-completeness -Wno-expansion-to-defined -Wno-undef-prefix
  -fPIC -I/Users/me/code/.cache/uv/builds-v0/.tmpAU7ftf/include
  -I/Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14 -c
  src/greenlet/greenlet.cpp -o build/temp.macosx-11.0-arm64-cpython-314/src/greenlet/greenlet.o --std=c++11

  [stderr]
  /Users/me/code/.cache/uv/builds-v0/.tmpAU7ftf/lib/python3.14/site-packages/setuptools/dist.py:765:
  SetuptoolsDeprecationWarning: License classifiers are deprecated.
  !!

          ********************************************************************************
          Please consider removing the following classifiers in favor of a SPDX license expression:

          License :: OSI Approved :: MIT License

          See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
          ********************************************************************************

  !!
    self._finalize_license_expression()
  warning: no previously-included files found matching 'benchmarks/*.json'
  no previously-included directories found matching 'docs/_build'
  warning: no files found matching '*.py' under directory 'appveyor'
  warning: no previously-included files matching '*.pyc' found anywhere in distribution
  warning: no previously-included files matching '*.pyd' found anywhere in distribution
  warning: no previously-included files matching '*.so' found anywhere in distribution
  warning: no previously-included files matching '.coverage' found anywhere in distribution
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:626:29: error: variable has incomplete type '_PyInterpreterFrame'
    626 |         _PyInterpreterFrame iframe_copy;
        |                             ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:627:71: error: invalid application of 'sizeof' to an incomplete type '_PyInterpreterFrame'
    627 |         this->stack_state.copy_from_stack(&iframe_copy, iframe, sizeof(*iframe));
        |                                                                       ^~~~~~~~~
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:654:24: error: member access into incomplete type '_PyInterpreterFrame'
    654 |             if (!iframe->frame_obj) {
        |                        ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:656:37: error: variable has incomplete type '_PyInterpreterFrame'
    656 |                 _PyInterpreterFrame dummy_iframe;
        |                                     ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:661:38: error: use of undeclared identifier 'FRAME_OWNED_BY_GENERATOR'
    661 |                 dummy_iframe.owner = FRAME_OWNED_BY_GENERATOR;
        |                                      ^
  src/greenlet/TGreenlet.cpp:686:45: error: member access into incomplete type '_PyInterpreterFrame'
    686 |                 memcpy(&last_complete_iframe->frame_obj->_f_frame_data[0],
        |                                             ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:687:45: error: member access into incomplete type '_PyInterpreterFrame'
    687 |                        &last_complete_iframe->previous, sizeof(void *));
        |                                             ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:688:37: error: member access into incomplete type '_PyInterpreterFrame'
    688 |                 last_complete_iframe->previous = iframe;
        |                                     ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:705:37: error: member access into incomplete type '_PyInterpreterFrame'
    705 |         memcpy(&last_complete_iframe->frame_obj->_f_frame_data[0],
        |                                     ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:706:37: error: member access into incomplete type '_PyInterpreterFrame'
    706 |                &last_complete_iframe->previous, sizeof(void *));
        |                                     ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:31:
  src/greenlet/TGreenlet.cpp:707:29: error: member access into incomplete type '_PyInterpreterFrame'
    707 |         last_complete_iframe->previous = nullptr;
        |                             ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:36:
  src/greenlet/TPythonState.cpp:137:31: error: use of undeclared identifier 'Py_C_RECURSION_LIMIT'
    137 |     this->c_recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining;
        |                               ^
  src/greenlet/TPythonState.cpp:137:62: error: no member named 'c_recursion_remaining' in '_ts'
    137 |     this->c_recursion_depth = Py_C_RECURSION_LIMIT - tstate->c_recursion_remaining;
        |                                                      ~~~~~~  ^
  src/greenlet/TPythonState.cpp:179:51: error: member access into incomplete type '_PyInterpreterFrame'
    179 |         _PyInterpreterFrame *prev_exposed = iframe->previous;
        |                                                   ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:36:
  src/greenlet/TPythonState.cpp:181:23: error: member access into incomplete type '_PyInterpreterFrame'
    181 |         memcpy(&iframe->previous, &iframe->frame_obj->_f_frame_data[0],
        |                       ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:36:
  src/greenlet/TPythonState.cpp:181:42: error: member access into incomplete type '_PyInterpreterFrame'
    181 |         memcpy(&iframe->previous, &iframe->frame_obj->_f_frame_data[0],
        |                                          ^
  /Users/me/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/include/python3.14/cpython/pyframe.h:25:8:
  note: forward declaration of '_PyInterpreterFrame'
     25 | struct _PyInterpreterFrame;
        |        ^
  In file included from src/greenlet/greenlet.cpp:36:
  src/greenlet/TPythonState.cpp:212:13: error: no member named 'c_recursion_remaining' in '_ts'
    212 |     tstate->c_recursion_remaining = Py_C_RECURSION_LIMIT - this->c_recursion_depth;
        |     ~~~~~~  ^
  src/greenlet/TPythonState.cpp:212:37: error: use of undeclared identifier 'Py_C_RECURSION_LIMIT'
    212 |     tstate->c_recursion_remaining = Py_C_RECURSION_LIMIT - this->c_recursion_depth;
        |                                     ^
  18 errors generated.
  error: command '/usr/bin/c++' failed with exit code 1

  hint: This usually indicates a problem with the package or the build environment.

help: greenlet (v3.1.1) was included because dev depends on playwright (v1.58.0) which depends on greenlet

</details>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions