Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test failures with Python 3.13 freethreading #636

Closed
mgorny opened this issue Oct 11, 2024 · 0 comments · Fixed by #637
Closed

Test failures with Python 3.13 freethreading #636

mgorny opened this issue Oct 11, 2024 · 0 comments · Fixed by #637

Comments

@mgorny
Copy link
Contributor

mgorny commented Oct 11, 2024

Somewhat related to #624 (or rather, it's setuptools counterpart), though I'm specifically talking of test failures within wheel package:

$ python -m pytest
========================================================= test session starts =========================================================
platform linux -- Python 3.13.0, pytest-8.3.3, pluggy-1.5.0
rootdir: /tmp/wheel
configfile: pyproject.toml
collected 93 items / 1 skipped                                                                                                        

tests/cli/test_convert.py .E                                                                                                    [  2%]
tests/cli/test_pack.py ....                                                                                                     [  6%]
tests/cli/test_tags.py ...........                                                                                              [ 18%]
tests/cli/test_unpack.py E.                                                                                                     [ 20%]
tests/test_bdist_wheel.py EE............E.............                                                                          [ 50%]
tests/test_macosx_libfile.py ............                                                                                       [ 63%]
tests/test_metadata.py .                                                                                                        [ 64%]
tests/test_tagopt.py s............                                                                                              [ 78%]
tests/test_wheelfile.py ....................                                                                                    [100%]

=============================================================== ERRORS ================================================================
_________________________________________________ ERROR at setup of test_convert_egg __________________________________________________

tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

    @pytest.fixture(scope="session")
    def wheels_and_eggs(tmp_path_factory):
        """Build wheels and eggs from test distributions."""
        test_distributions = (
            "complex-dist",
            "simple.dist",
            "headers.dist",
            "commasinfilenames.dist",
            "unicode.dist",
        )
    
        if sys.platform != "win32":
            # ABI3 extensions don't really work on Windows
            test_distributions += ("abi3extension.dist",)
    
        pwd = os.path.abspath(os.curdir)
        this_dir = os.path.dirname(__file__)
        build_dir = tmp_path_factory.mktemp("build")
        dist_dir = tmp_path_factory.mktemp("dist")
        for dist in test_distributions:
            os.chdir(os.path.join(this_dir, "testdata", dist))
>           subprocess.check_call(
                [
                    sys.executable,
                    "setup.py",
                    "bdist_egg",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                    "bdist_wheel",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                ]
            )

build_dir  = PosixPath('/tmp/pytest-of-mgorny/pytest-1/build0')
dist       = 'abi3extension.dist'
dist_dir   = PosixPath('/tmp/pytest-of-mgorny/pytest-1/dist0')
pwd        = '/tmp/wheel'
test_distributions = ('complex-dist', 'simple.dist', 'headers.dist', 'commasinfilenames.dist', 'unicode.dist', 'abi3extension.dist')
this_dir   = '/tmp/wheel/tests'
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

/tmp/wheel/tests/conftest.py:35: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

popenargs = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
kwargs = {}, retcode = 1
cmd = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]

    def check_call(*popenargs, **kwargs):
        """Run command with arguments.  Wait for command to complete.  If
        the exit code was zero then return, otherwise raise
        CalledProcessError.  The CalledProcessError object will have the
        return code in the returncode attribute.
    
        The arguments are the same as for the call function.  Example:
    
        check_call(["ls", "-l"])
        """
        retcode = call(*popenargs, **kwargs)
        if retcode:
            cmd = kwargs.get("args")
            if cmd is None:
                cmd = popenargs[0]
>           raise CalledProcessError(retcode, cmd)
E           subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0', 'bdist_wheel', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0']' returned non-zero exit status 1.

cmd        = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]
kwargs     = {}
popenargs  = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
retcode    = 1

/usr/lib/python3.13t/subprocess.py:419: CalledProcessError
-------------------------------------------------------- Captured stdout setup --------------------------------------------------------
running bdist_egg
running egg_info
writing complex_dist.egg-info/PKG-INFO
writing dependency_links to complex_dist.egg-info/dependency_links.txt
writing entry points to complex_dist.egg-info/entry_points.txt
writing requirements to complex_dist.egg-info/requires.txt
writing top-level names to complex_dist.egg-info/top_level.txt
reading manifest file 'complex_dist.egg-info/SOURCES.txt'
writing manifest file 'complex_dist.egg-info/SOURCES.txt'
installing library code to /tmp/pytest-of-mgorny/pytest-1/build0
running install_lib
running build_py
copying complexdist/__init__.py -> build/lib/complexdist
creating /tmp/pytest-of-mgorny/pytest-1/build0/complexdist
copying build/lib/complexdist/__init__.py -> /tmp/pytest-of-mgorny/pytest-1/build0/complexdist
byte-compiling /tmp/pytest-of-mgorny/pytest-1/build0/complexdist/__init__.py to __init__.cpython-313.pyc
creating /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying complex_dist.egg-info/PKG-INFO -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying complex_dist.egg-info/SOURCES.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying complex_dist.egg-info/dependency_links.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying complex_dist.egg-info/entry_points.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying complex_dist.egg-info/requires.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying complex_dist.egg-info/top_level.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/complex_dist-0.1-py3.13.egg' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
removing '/tmp/pytest-of-mgorny/pytest-1/build0' (and everything under it)
running bdist_wheel
running build
installing to /tmp/pytest-of-mgorny/pytest-1/build0
running install
running install_lib
creating /tmp/pytest-of-mgorny/pytest-1/build0
creating /tmp/pytest-of-mgorny/pytest-1/build0/complexdist
copying build/lib/complexdist/__init__.py -> /tmp/pytest-of-mgorny/pytest-1/build0/./complexdist
running install_egg_info
Copying complex_dist.egg-info to /tmp/pytest-of-mgorny/pytest-1/build0/./complex_dist-0.1-py3.13.egg-info
running install_scripts
creating /tmp/pytest-of-mgorny/pytest-1/build0/complex_dist-0.1.dist-info/WHEEL
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/complex_dist-0.1-py3-none-any.whl' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
adding 'complexdist/__init__.py'
adding 'complex_dist-0.1.dist-info/METADATA'
adding 'complex_dist-0.1.dist-info/WHEEL'
adding 'complex_dist-0.1.dist-info/entry_points.txt'
adding 'complex_dist-0.1.dist-info/top_level.txt'
adding 'complex_dist-0.1.dist-info/RECORD'
removing /tmp/pytest-of-mgorny/pytest-1/build0
running bdist_egg
running egg_info
writing simple.dist.egg-info/PKG-INFO
writing dependency_links to simple.dist.egg-info/dependency_links.txt
writing requirements to simple.dist.egg-info/requires.txt
writing top-level names to simple.dist.egg-info/top_level.txt
reading manifest file 'simple.dist.egg-info/SOURCES.txt'
writing manifest file 'simple.dist.egg-info/SOURCES.txt'
installing library code to /tmp/pytest-of-mgorny/pytest-1/build0
running install_lib
running build_py
copying simpledist/__init__.py -> build/lib/simpledist
creating /tmp/pytest-of-mgorny/pytest-1/build0
creating /tmp/pytest-of-mgorny/pytest-1/build0/simpledist
copying build/lib/simpledist/__init__.py -> /tmp/pytest-of-mgorny/pytest-1/build0/simpledist
byte-compiling /tmp/pytest-of-mgorny/pytest-1/build0/simpledist/__init__.py to __init__.cpython-313.pyc
creating /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying simple.dist.egg-info/PKG-INFO -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying simple.dist.egg-info/SOURCES.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying simple.dist.egg-info/dependency_links.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying simple.dist.egg-info/requires.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying simple.dist.egg-info/top_level.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/simple.dist-0.1-py3.13.egg' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
removing '/tmp/pytest-of-mgorny/pytest-1/build0' (and everything under it)
running bdist_wheel
running build
installing to /tmp/pytest-of-mgorny/pytest-1/build0
running install
running install_lib
creating /tmp/pytest-of-mgorny/pytest-1/build0
creating /tmp/pytest-of-mgorny/pytest-1/build0/simpledist
copying build/lib/simpledist/__init__.py -> /tmp/pytest-of-mgorny/pytest-1/build0/./simpledist
running install_egg_info
Copying simple.dist.egg-info to /tmp/pytest-of-mgorny/pytest-1/build0/./simple.dist-0.1-py3.13.egg-info
running install_scripts
creating /tmp/pytest-of-mgorny/pytest-1/build0/simple.dist-0.1.dist-info/WHEEL
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/simple.dist-0.1-py3-none-any.whl' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
adding 'simpledist/__init__.py'
adding 'simple.dist-0.1.dist-info/METADATA'
adding 'simple.dist-0.1.dist-info/WHEEL'
adding 'simple.dist-0.1.dist-info/top_level.txt'
adding 'simple.dist-0.1.dist-info/RECORD'
removing /tmp/pytest-of-mgorny/pytest-1/build0
running bdist_egg
running egg_info
writing headers.dist.egg-info/PKG-INFO
writing dependency_links to headers.dist.egg-info/dependency_links.txt
writing top-level names to headers.dist.egg-info/top_level.txt
reading manifest file 'headers.dist.egg-info/SOURCES.txt'
writing manifest file 'headers.dist.egg-info/SOURCES.txt'
installing library code to /tmp/pytest-of-mgorny/pytest-1/build0
running install_lib
running build_py
copying headersdist.py -> build/lib
creating /tmp/pytest-of-mgorny/pytest-1/build0
copying build/lib/headersdist.py -> /tmp/pytest-of-mgorny/pytest-1/build0
byte-compiling /tmp/pytest-of-mgorny/pytest-1/build0/headersdist.py to headersdist.cpython-313.pyc
creating /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying headers.dist.egg-info/PKG-INFO -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying headers.dist.egg-info/SOURCES.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying headers.dist.egg-info/dependency_links.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying headers.dist.egg-info/top_level.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/headers.dist-0.1-py3.13.egg' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
removing '/tmp/pytest-of-mgorny/pytest-1/build0' (and everything under it)
running bdist_wheel
running build
installing to /tmp/pytest-of-mgorny/pytest-1/build0
running install
running install_lib
creating /tmp/pytest-of-mgorny/pytest-1/build0
copying build/lib/headersdist.py -> /tmp/pytest-of-mgorny/pytest-1/build0/.
running install_headers
creating /tmp/pytest-of-mgorny/pytest-1/build0/headers.dist-0.1.data/headers
copying header.h -> /tmp/pytest-of-mgorny/pytest-1/build0/headers.dist-0.1.data/headers
running install_egg_info
Copying headers.dist.egg-info to /tmp/pytest-of-mgorny/pytest-1/build0/./headers.dist-0.1-py3.13.egg-info
running install_scripts
creating /tmp/pytest-of-mgorny/pytest-1/build0/headers.dist-0.1.dist-info/WHEEL
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/headers.dist-0.1-py2.py3-none-any.whl' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
adding 'headersdist.py'
adding 'headers.dist-0.1.data/headers/header.h'
adding 'headers.dist-0.1.dist-info/METADATA'
adding 'headers.dist-0.1.dist-info/WHEEL'
adding 'headers.dist-0.1.dist-info/top_level.txt'
adding 'headers.dist-0.1.dist-info/RECORD'
removing /tmp/pytest-of-mgorny/pytest-1/build0
running bdist_egg
running egg_info
writing testrepo.egg-info/PKG-INFO
writing dependency_links to testrepo.egg-info/dependency_links.txt
writing top-level names to testrepo.egg-info/top_level.txt
reading manifest file 'testrepo.egg-info/SOURCES.txt'
writing manifest file 'testrepo.egg-info/SOURCES.txt'
installing library code to /tmp/pytest-of-mgorny/pytest-1/build0
running install_lib
running build_py
copying mypackage/__init__.py -> build/lib/mypackage
creating /tmp/pytest-of-mgorny/pytest-1/build0
creating /tmp/pytest-of-mgorny/pytest-1/build0/mypackage
copying build/lib/mypackage/__init__.py -> /tmp/pytest-of-mgorny/pytest-1/build0/mypackage
byte-compiling /tmp/pytest-of-mgorny/pytest-1/build0/mypackage/__init__.py to __init__.cpython-313.pyc
creating /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying testrepo.egg-info/PKG-INFO -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying testrepo.egg-info/SOURCES.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying testrepo.egg-info/dependency_links.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying testrepo.egg-info/top_level.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/testrepo-0.1-py3.13.egg' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
removing '/tmp/pytest-of-mgorny/pytest-1/build0' (and everything under it)
running bdist_wheel
running build
installing to /tmp/pytest-of-mgorny/pytest-1/build0
running install
running install_lib
creating /tmp/pytest-of-mgorny/pytest-1/build0
creating /tmp/pytest-of-mgorny/pytest-1/build0/mypackage
copying build/lib/mypackage/__init__.py -> /tmp/pytest-of-mgorny/pytest-1/build0/./mypackage
running install_egg_info
Copying testrepo.egg-info to /tmp/pytest-of-mgorny/pytest-1/build0/./testrepo-0.1-py3.13.egg-info
running install_scripts
creating /tmp/pytest-of-mgorny/pytest-1/build0/testrepo-0.1.dist-info/WHEEL
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/testrepo-0.1-py3-none-any.whl' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
adding 'mypackage/__init__.py'
adding 'testrepo-0.1.dist-info/METADATA'
adding 'testrepo-0.1.dist-info/WHEEL'
adding 'testrepo-0.1.dist-info/top_level.txt'
adding 'testrepo-0.1.dist-info/RECORD'
removing /tmp/pytest-of-mgorny/pytest-1/build0
running bdist_egg
running egg_info
writing unicode.dist.egg-info/PKG-INFO
writing dependency_links to unicode.dist.egg-info/dependency_links.txt
writing top-level names to unicode.dist.egg-info/top_level.txt
reading manifest file 'unicode.dist.egg-info/SOURCES.txt'
writing manifest file 'unicode.dist.egg-info/SOURCES.txt'
installing library code to /tmp/pytest-of-mgorny/pytest-1/build0
running install_lib
running build_py
copying unicodedist/__init__.py -> build/lib/unicodedist
copying unicodedist/åäö_日本語.py -> build/lib/unicodedist
creating /tmp/pytest-of-mgorny/pytest-1/build0
creating /tmp/pytest-of-mgorny/pytest-1/build0/unicodedist
copying build/lib/unicodedist/__init__.py -> /tmp/pytest-of-mgorny/pytest-1/build0/unicodedist
copying build/lib/unicodedist/åäö_日本語.py -> /tmp/pytest-of-mgorny/pytest-1/build0/unicodedist
byte-compiling /tmp/pytest-of-mgorny/pytest-1/build0/unicodedist/__init__.py to __init__.cpython-313.pyc
byte-compiling /tmp/pytest-of-mgorny/pytest-1/build0/unicodedist/åäö_日本語.py to åäö_日本語.cpython-313.pyc
creating /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying unicode.dist.egg-info/PKG-INFO -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying unicode.dist.egg-info/SOURCES.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying unicode.dist.egg-info/dependency_links.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying unicode.dist.egg-info/top_level.txt -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
copying unicode.dist.egg-info/zip-safe -> /tmp/pytest-of-mgorny/pytest-1/build0/EGG-INFO
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/unicode.dist-0.1-py3.13.egg' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
removing '/tmp/pytest-of-mgorny/pytest-1/build0' (and everything under it)
running bdist_wheel
running build
installing to /tmp/pytest-of-mgorny/pytest-1/build0
running install
running install_lib
creating /tmp/pytest-of-mgorny/pytest-1/build0
creating /tmp/pytest-of-mgorny/pytest-1/build0/unicodedist
copying build/lib/unicodedist/__init__.py -> /tmp/pytest-of-mgorny/pytest-1/build0/./unicodedist
copying build/lib/unicodedist/åäö_日本語.py -> /tmp/pytest-of-mgorny/pytest-1/build0/./unicodedist
running install_egg_info
Copying unicode.dist.egg-info to /tmp/pytest-of-mgorny/pytest-1/build0/./unicode.dist-0.1-py3.13.egg-info
running install_scripts
creating /tmp/pytest-of-mgorny/pytest-1/build0/unicode.dist-0.1.dist-info/WHEEL
creating '/tmp/pytest-of-mgorny/pytest-1/dist0/unicode.dist-0.1-py3-none-any.whl' and adding '/tmp/pytest-of-mgorny/pytest-1/build0' to it
adding 'unicodedist/__init__.py'
adding 'unicodedist/åäö_日本語.py'
adding 'unicode.dist-0.1.dist-info/METADATA'
adding 'unicode.dist-0.1.dist-info/WHEEL'
adding 'unicode.dist-0.1.dist-info/top_level.txt'
adding 'unicode.dist-0.1.dist-info/zip-safe'
adding 'unicode.dist-0.1.dist-info/RECORD'
removing /tmp/pytest-of-mgorny/pytest-1/build0
running bdist_egg
running egg_info
writing extension.dist.egg-info/PKG-INFO
writing dependency_links to extension.dist.egg-info/dependency_links.txt
writing top-level names to extension.dist.egg-info/top_level.txt
reading manifest file 'extension.dist.egg-info/SOURCES.txt'
writing manifest file 'extension.dist.egg-info/SOURCES.txt'
installing library code to /tmp/pytest-of-mgorny/pytest-1/build0
running install_lib
running build_ext
building 'extension' extension
x86_64-pc-linux-gnu-gcc -fno-strict-overflow -Wsign-compare -DNDEBUG -fPIC -I/tmp/wheel/.venv/include -I/usr/include/python3.13t -c extension.c -o build/temp.linux-x86_64-cpython-313t/extension.o
-------------------------------------------------------- Captured stderr setup --------------------------------------------------------
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/__init__.py:94: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
!!

        ********************************************************************************
        Requirements should be satisfied by a PEP 517 installer.
        If you are using pip, you can try `pip install --use-pep517`.
        ********************************************************************************

!!
  dist.fetch_build_eggs(dist.setup_requires)
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/dist.py:261: UserWarning: Unknown distribution option: 'tests_require'
  warnings.warn(msg)
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/cmd.py:66: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  self.initialize_options()
zip_safe flag not set; analyzing archive contents...
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/dist.py:932: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  command.initialize_options()
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/cmd.py:66: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  self.initialize_options()
zip_safe flag not set; analyzing archive contents...
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/dist.py:932: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  command.initialize_options()
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/cmd.py:66: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  self.initialize_options()
zip_safe flag not set; analyzing archive contents...
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/cmd.py:111: SetuptoolsDeprecationWarning: bdist_wheel.universal is deprecated
!!

        ********************************************************************************
        With Python 2.7 end-of-life, support for building universal wheels
        (i.e., wheels that support both Python 2 and Python 3)
        is being obviated.
        Please discontinue using this option, or if you still need it,
        file an issue with pypa/setuptools describing your use case.

        By 2025-Aug-30, you need to update your project and remove deprecated calls
        or your builds will no longer be supported.
        ********************************************************************************

!!
  self.finalize_options()
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/dist.py:932: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  command.initialize_options()
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/cmd.py:66: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  self.initialize_options()
zip_safe flag not set; analyzing archive contents...
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/dist.py:932: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  command.initialize_options()
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/cmd.py:66: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  self.initialize_options()
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/dist.py:932: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  command.initialize_options()
/tmp/wheel/.venv/lib/python3.13t/site-packages/setuptools/_distutils/cmd.py:66: SetuptoolsDeprecationWarning: setup.py install is deprecated.
!!

        ********************************************************************************
        Please avoid running ``setup.py`` directly.
        Instead, use pypa/build, pypa/installer or other
        standards-based tools.

        See https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html for details.
        ********************************************************************************

!!
  self.initialize_options()
In file included from extension.c:2:
/usr/include/python3.13t/Python.h:50:4: error: #error "The limited API is not currently supported in the free-threaded build"
   50 | #  error "The limited API is not currently supported in the free-threaded build"
      |    ^~~~~
In file included from /usr/include/python3.13t/Python.h:71:
/usr/include/python3.13t/object.h:213:5: error: unknown type name ‘PyMutex’
  213 |     PyMutex ob_mutex;           // per-object lock
      |     ^~~~~~~
/usr/include/python3.13t/object.h: In function ‘Py_REFCNT’:
/usr/include/python3.13t/object.h:320:22: error: implicit declaration of function ‘_Py_atomic_load_uint32_relaxed’ [-Wimplicit-function-declaration]
  320 |     uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/python3.13t/object.h:324:25: error: implicit declaration of function ‘_Py_atomic_load_ssize_relaxed’ [-Wimplicit-function-declaration]
  324 |     Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
      |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/python3.13t/object.h: In function ‘_Py_IsImmortal’:
/usr/include/python3.13t/object.h:358:63: warning: comparison of integer expressions of different signedness: ‘int’ and ‘unsigned int’ [-Wsign-compare]
  358 |     return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
      |                                                               ^~
/usr/include/python3.13t/object.h: In function ‘Py_SET_REFCNT’:
/usr/include/python3.13t/object.h:396:9: error: implicit declaration of function ‘_Py_IsOwnedByCurrentThread’ [-Wimplicit-function-declaration]
  396 |     if (_Py_IsOwnedByCurrentThread(ob)) {
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/python3.13t/object.h: In function ‘Py_SET_SIZE’:
/usr/include/python3.13t/object.h:436:5: error: implicit declaration of function ‘_Py_atomic_store_ssize_relaxed’ [-Wimplicit-function-declaration]
  436 |     _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/python3.13t/object.h: In function ‘Py_INCREF’:
/usr/include/python3.13t/object.h:817:9: error: implicit declaration of function ‘_Py_atomic_store_uint32_relaxed’ [-Wimplicit-function-declaration]
  817 |         _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/python3.13t/object.h:820:9: error: implicit declaration of function ‘_Py_atomic_add_ssize’; did you mean ‘__atomic_add_fetch’? [-Wimplicit-function-declaration]
  820 |         _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
      |         ^~~~~~~~~~~~~~~~~~~~
      |         __atomic_add_fetch
/usr/include/python3.13t/object.h: In function ‘Py_DECREF’:
/usr/include/python3.13t/object.h:913:13: error: implicit declaration of function ‘_Py_MergeZeroLocalRefcount’ [-Wimplicit-function-declaration]
  913 |             _Py_MergeZeroLocalRefcount(op);
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/python3.13t/object.h:917:9: error: implicit declaration of function ‘_Py_DecRefShared’; did you mean ‘_Py_DecRef’? [-Wimplicit-function-declaration]
  917 |         _Py_DecRefShared(op);
      |         ^~~~~~~~~~~~~~~~
      |         _Py_DecRef
error: command '/usr/bin/x86_64-pc-linux-gnu-gcc' failed with exit code 1
____________________________________________________ ERROR at setup of test_unpack ____________________________________________________

tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

    @pytest.fixture(scope="session")
    def wheels_and_eggs(tmp_path_factory):
        """Build wheels and eggs from test distributions."""
        test_distributions = (
            "complex-dist",
            "simple.dist",
            "headers.dist",
            "commasinfilenames.dist",
            "unicode.dist",
        )
    
        if sys.platform != "win32":
            # ABI3 extensions don't really work on Windows
            test_distributions += ("abi3extension.dist",)
    
        pwd = os.path.abspath(os.curdir)
        this_dir = os.path.dirname(__file__)
        build_dir = tmp_path_factory.mktemp("build")
        dist_dir = tmp_path_factory.mktemp("dist")
        for dist in test_distributions:
            os.chdir(os.path.join(this_dir, "testdata", dist))
>           subprocess.check_call(
                [
                    sys.executable,
                    "setup.py",
                    "bdist_egg",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                    "bdist_wheel",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                ]
            )

build_dir  = PosixPath('/tmp/pytest-of-mgorny/pytest-1/build0')
dist       = 'abi3extension.dist'
dist_dir   = PosixPath('/tmp/pytest-of-mgorny/pytest-1/dist0')
pwd        = '/tmp/wheel'
test_distributions = ('complex-dist', 'simple.dist', 'headers.dist', 'commasinfilenames.dist', 'unicode.dist', 'abi3extension.dist')
this_dir   = '/tmp/wheel/tests'
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

/tmp/wheel/tests/conftest.py:35: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

popenargs = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
kwargs = {}, retcode = 1
cmd = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]

    def check_call(*popenargs, **kwargs):
        """Run command with arguments.  Wait for command to complete.  If
        the exit code was zero then return, otherwise raise
        CalledProcessError.  The CalledProcessError object will have the
        return code in the returncode attribute.
    
        The arguments are the same as for the call function.  Example:
    
        check_call(["ls", "-l"])
        """
        retcode = call(*popenargs, **kwargs)
        if retcode:
            cmd = kwargs.get("args")
            if cmd is None:
                cmd = popenargs[0]
>           raise CalledProcessError(retcode, cmd)
E           subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0', 'bdist_wheel', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0']' returned non-zero exit status 1.

cmd        = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]
kwargs     = {}
popenargs  = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
retcode    = 1

/usr/lib/python3.13t/subprocess.py:419: CalledProcessError
__________________________________________________ ERROR at setup of test_no_scripts __________________________________________________

tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

    @pytest.fixture(scope="session")
    def wheels_and_eggs(tmp_path_factory):
        """Build wheels and eggs from test distributions."""
        test_distributions = (
            "complex-dist",
            "simple.dist",
            "headers.dist",
            "commasinfilenames.dist",
            "unicode.dist",
        )
    
        if sys.platform != "win32":
            # ABI3 extensions don't really work on Windows
            test_distributions += ("abi3extension.dist",)
    
        pwd = os.path.abspath(os.curdir)
        this_dir = os.path.dirname(__file__)
        build_dir = tmp_path_factory.mktemp("build")
        dist_dir = tmp_path_factory.mktemp("dist")
        for dist in test_distributions:
            os.chdir(os.path.join(this_dir, "testdata", dist))
>           subprocess.check_call(
                [
                    sys.executable,
                    "setup.py",
                    "bdist_egg",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                    "bdist_wheel",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                ]
            )

build_dir  = PosixPath('/tmp/pytest-of-mgorny/pytest-1/build0')
dist       = 'abi3extension.dist'
dist_dir   = PosixPath('/tmp/pytest-of-mgorny/pytest-1/dist0')
pwd        = '/tmp/wheel'
test_distributions = ('complex-dist', 'simple.dist', 'headers.dist', 'commasinfilenames.dist', 'unicode.dist', 'abi3extension.dist')
this_dir   = '/tmp/wheel/tests'
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

/tmp/wheel/tests/conftest.py:35: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

popenargs = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
kwargs = {}, retcode = 1
cmd = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]

    def check_call(*popenargs, **kwargs):
        """Run command with arguments.  Wait for command to complete.  If
        the exit code was zero then return, otherwise raise
        CalledProcessError.  The CalledProcessError object will have the
        return code in the returncode attribute.
    
        The arguments are the same as for the call function.  Example:
    
        check_call(["ls", "-l"])
        """
        retcode = call(*popenargs, **kwargs)
        if retcode:
            cmd = kwargs.get("args")
            if cmd is None:
                cmd = popenargs[0]
>           raise CalledProcessError(retcode, cmd)
E           subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0', 'bdist_wheel', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0']' returned non-zero exit status 1.

cmd        = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]
kwargs     = {}
popenargs  = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
retcode    = 1

/usr/lib/python3.13t/subprocess.py:419: CalledProcessError
________________________________________________ ERROR at setup of test_unicode_record ________________________________________________

tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

    @pytest.fixture(scope="session")
    def wheels_and_eggs(tmp_path_factory):
        """Build wheels and eggs from test distributions."""
        test_distributions = (
            "complex-dist",
            "simple.dist",
            "headers.dist",
            "commasinfilenames.dist",
            "unicode.dist",
        )
    
        if sys.platform != "win32":
            # ABI3 extensions don't really work on Windows
            test_distributions += ("abi3extension.dist",)
    
        pwd = os.path.abspath(os.curdir)
        this_dir = os.path.dirname(__file__)
        build_dir = tmp_path_factory.mktemp("build")
        dist_dir = tmp_path_factory.mktemp("dist")
        for dist in test_distributions:
            os.chdir(os.path.join(this_dir, "testdata", dist))
>           subprocess.check_call(
                [
                    sys.executable,
                    "setup.py",
                    "bdist_egg",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                    "bdist_wheel",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                ]
            )

build_dir  = PosixPath('/tmp/pytest-of-mgorny/pytest-1/build0')
dist       = 'abi3extension.dist'
dist_dir   = PosixPath('/tmp/pytest-of-mgorny/pytest-1/dist0')
pwd        = '/tmp/wheel'
test_distributions = ('complex-dist', 'simple.dist', 'headers.dist', 'commasinfilenames.dist', 'unicode.dist', 'abi3extension.dist')
this_dir   = '/tmp/wheel/tests'
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

/tmp/wheel/tests/conftest.py:35: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

popenargs = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
kwargs = {}, retcode = 1
cmd = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]

    def check_call(*popenargs, **kwargs):
        """Run command with arguments.  Wait for command to complete.  If
        the exit code was zero then return, otherwise raise
        CalledProcessError.  The CalledProcessError object will have the
        return code in the returncode attribute.
    
        The arguments are the same as for the call function.  Example:
    
        check_call(["ls", "-l"])
        """
        retcode = call(*popenargs, **kwargs)
        if retcode:
            cmd = kwargs.get("args")
            if cmd is None:
                cmd = popenargs[0]
>           raise CalledProcessError(retcode, cmd)
E           subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0', 'bdist_wheel', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0']' returned non-zero exit status 1.

cmd        = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]
kwargs     = {}
popenargs  = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
retcode    = 1

/usr/lib/python3.13t/subprocess.py:419: CalledProcessError
____________________________________________ ERROR at setup of test_wheelfile_line_endings ____________________________________________

tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

    @pytest.fixture(scope="session")
    def wheels_and_eggs(tmp_path_factory):
        """Build wheels and eggs from test distributions."""
        test_distributions = (
            "complex-dist",
            "simple.dist",
            "headers.dist",
            "commasinfilenames.dist",
            "unicode.dist",
        )
    
        if sys.platform != "win32":
            # ABI3 extensions don't really work on Windows
            test_distributions += ("abi3extension.dist",)
    
        pwd = os.path.abspath(os.curdir)
        this_dir = os.path.dirname(__file__)
        build_dir = tmp_path_factory.mktemp("build")
        dist_dir = tmp_path_factory.mktemp("dist")
        for dist in test_distributions:
            os.chdir(os.path.join(this_dir, "testdata", dist))
>           subprocess.check_call(
                [
                    sys.executable,
                    "setup.py",
                    "bdist_egg",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                    "bdist_wheel",
                    "-b",
                    str(build_dir),
                    "-d",
                    str(dist_dir),
                ]
            )

build_dir  = PosixPath('/tmp/pytest-of-mgorny/pytest-1/build0')
dist       = 'abi3extension.dist'
dist_dir   = PosixPath('/tmp/pytest-of-mgorny/pytest-1/dist0')
pwd        = '/tmp/wheel'
test_distributions = ('complex-dist', 'simple.dist', 'headers.dist', 'commasinfilenames.dist', 'unicode.dist', 'abi3extension.dist')
this_dir   = '/tmp/wheel/tests'
tmp_path_factory = TempPathFactory(_given_basetemp=None, _trace=<pluggy._tracing.TagTracerSub object at 0x4ee319a1e10>, _basetemp=PosixPath('/tmp/pytest-of-mgorny/pytest-1'), _retention_count=3, _retention_policy='all')

/tmp/wheel/tests/conftest.py:35: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

popenargs = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
kwargs = {}, retcode = 1
cmd = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]

    def check_call(*popenargs, **kwargs):
        """Run command with arguments.  Wait for command to complete.  If
        the exit code was zero then return, otherwise raise
        CalledProcessError.  The CalledProcessError object will have the
        return code in the returncode attribute.
    
        The arguments are the same as for the call function.  Example:
    
        check_call(["ls", "-l"])
        """
        retcode = call(*popenargs, **kwargs)
        if retcode:
            cmd = kwargs.get("args")
            if cmd is None:
                cmd = popenargs[0]
>           raise CalledProcessError(retcode, cmd)
E           subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0', 'bdist_wheel', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', '/tmp/pytest-of-mgorny/pytest-1/dist0']' returned non-zero exit status 1.

cmd        = ['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...]
kwargs     = {}
popenargs  = (['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pytest-1/build0', '-d', ...],)
retcode    = 1

/usr/lib/python3.13t/subprocess.py:419: CalledProcessError
======================================================= short test summary info =======================================================
SKIPPED [1] tests/test_sdist.py:8: could not import 'flit': No module named 'flit'
SKIPPED [1] tests/test_tagopt.py:53: Cannot compile C extensions
ERROR tests/cli/test_convert.py::test_convert_egg - subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pyte...
ERROR tests/cli/test_unpack.py::test_unpack - subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pyte...
ERROR tests/test_bdist_wheel.py::test_no_scripts - subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pyte...
ERROR tests/test_bdist_wheel.py::test_unicode_record - subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pyte...
ERROR tests/test_bdist_wheel.py::test_wheelfile_line_endings - subprocess.CalledProcessError: Command '['/tmp/wheel/.venv/bin/python', 'setup.py', 'bdist_egg', '-b', '/tmp/pytest-of-mgorny/pyte...
============================================== 87 passed, 2 skipped, 5 errors in 13.56s ===============================================

The tests pass if I remove abi3extension.dist from test_distributions. I'll try making a PR to skip it if freethreading build is used.

mgorny added a commit to mgorny/wheel that referenced this issue Oct 11, 2024
Skip the tests using abi3 extension when the freethreading build is
used, as Python 3.13 freethreading does not support the limited API
and its use results in a build error.

Fixes pypa#636
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant