Bug 285930 - devel/py-setuptools fails to build ERROR Backend subprocess exited when trying to invoke get_requires_for_build_wheel
Summary: devel/py-setuptools fails to build ERROR Backend subprocess exited when tryin...
Status: New
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: amd64 Any
: --- Affects Some People
Assignee: freebsd-python (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-04-07 08:10 UTC by Oclair
Modified: 2025-04-13 11:04 UTC (History)
2 users (show)

See Also:
bugzilla: maintainer-feedback? (python)


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Oclair 2025-04-07 08:10:51 UTC
FreeBSD 13.4-RELEASE-p4
Python 3.11.11 (main, Dec 13 2024, 06:45:40) [Clang 18.1.6 (https://github.com/llvm/llvm-project.git llvmorg-18.1.6-0-g1118c2 on freebsd13


/usr/ports/devel/py-setuptools # make
===>  License MIT accepted by the user
===>   py311-setuptools-63.1.0_3 depends on file: /usr/local/sbin/pkg - found
===> Fetching all distfiles required by py311-setuptools-63.1.0_3 for building
===>  Extracting for py311-setuptools-63.1.0_3
=> SHA256 Checksum OK for python/setuptools-63.1.0.tar.gz.
===>  Patching for py311-setuptools-63.1.0_3
===>   py311-setuptools-63.1.0_3 depends on package: py311-wheel044<0.46.0 - found
===>   py311-setuptools-63.1.0_3 depends on file: /usr/local/bin/python3.11 - found
===>   py311-setuptools-63.1.0_3 depends on package: py311-build>=0 - found
===>   py311-setuptools-63.1.0_3 depends on package: py311-installer>=0 - found
===>  Configuring for py311-setuptools-63.1.0_3
===>  Building for py311-setuptools-63.1.0_3
* Getting build dependencies for wheel...
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
    main()
  File "/usr/local/lib/python3.11/site-packages/pyproject_hooks/_in_process/_in_process.py", line 373, in main
    json_out["return_val"] = hook(**hook_input["kwargs"])
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pyproject_hooks/_in_process/_in_process.py", line 143, in get_requires_for_build_wheel
    return hook(config_settings)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/ports/devel/py-setuptools/work-py311/setuptools-63.1.0/setuptools/build_meta.py", line 177, in get_requires_for_build_wheel
    return self._get_build_requires(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/ports/devel/py-setuptools/work-py311/setuptools-63.1.0/setuptools/build_meta.py", line 159, in _get_build_requires
    self.run_setup()
  File "/usr/ports/devel/py-setuptools/work-py311/setuptools-63.1.0/setuptools/build_meta.py", line 174, in run_setup
    exec(compile(code, __file__, 'exec'), locals())
  File "setup.py", line 87, in <module>
    dist = setuptools.setup(**setup_params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/ports/devel/py-setuptools/work-py311/setuptools-63.1.0/setuptools/__init__.py", line 87, in setup
    return distutils.core.setup(**attrs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/ports/devel/py-setuptools/work-py311/setuptools-63.1.0/setuptools/_distutils/core.py", line 139, in setup
    _setup_distribution = dist = klass(attrs)
                                 ^^^^^^^^^^^^
  File "/usr/ports/devel/py-setuptools/work-py311/setuptools-63.1.0/setuptools/dist.py", line 476, in __init__
    _Distribution.__init__(
  File "/usr/ports/devel/py-setuptools/work-py311/setuptools-63.1.0/setuptools/_distutils/dist.py", line 275, in __init__
    self.finalize_options()
  File "/usr/ports/devel/py-setuptools/work-py311/setuptools-63.1.0/setuptools/dist.py", line 899, in finalize_options
    for ep in sorted(loaded, key=by_order):
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/ports/devel/py-setuptools/work-py311/setuptools-63.1.0/setuptools/dist.py", line 898, in <lambda>
    loaded = map(lambda e: e.load(), filtered)
                           ^^^^^^^^
  File "/usr/local/lib/python3.11/importlib/metadata/__init__.py", line 202, in load
    module = import_module(match.group('module'))
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1126, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/local/lib/python3.11/site-packages/setuptools_scm/__init__.py", line 7, in <module>
    from ._config import Configuration
  File "/usr/local/lib/python3.11/site-packages/setuptools_scm/_config.py", line 15, in <module>
    from ._integration.pyproject_reading import (
  File "/usr/local/lib/python3.11/site-packages/setuptools_scm/_integration/pyproject_reading.py", line 8, in <module>
    from .setuptools import read_dist_name_from_setup_cfg
  File "/usr/local/lib/python3.11/site-packages/setuptools_scm/_integration/setuptools.py", line 62, in <module>
    _warn_on_old_setuptools()
  File "/usr/local/lib/python3.11/site-packages/setuptools_scm/_integration/setuptools.py", line 29, in _warn_on_old_setuptools
    if int(_version.split(".")[0]) < 61:
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: invalid literal for int() with base r10: 'unknown'

ERROR Backend subprocess exited when trying to invoke get_requires_for_build_wheel
*** Error code 1

Stop.
make: stopped in /usr/ports/devel/py-setuptools
Comment 1 Trev 2025-04-10 05:44:29 UTC
Same problem.

Rebuilt all dependencies required by and depending on, same result
Comment 2 Trev 2025-04-10 05:45:39 UTC
14.2-STABLE FreeBSD 14.2-STABLE #6 stable/14-n270822-4a328b804996: Tue Mar 25 06:22:54 AEDT 2025
Comment 3 Trev 2025-04-10 07:24:10 UTC
All very weird and beyond my comprehension, but:

 1142  17:20  pkg delete py311-wheel044-0.44.0
 1143  17:21  pkg delete py311-wheel-0.45.1

allowed me to build and install py311-setuptools. py311-wheel044-0.44.0 was installed during build.
Comment 4 Trev 2025-04-10 07:28:30 UTC
It seems that some python packages require py311-wheel044-0.44.0 and some require py311-wheel-0.45.1 and, of course, these install files into the same place and so conflict. To build packages I have to keep swapping between the two.
Comment 5 Yuri Victorovich freebsd_committer freebsd_triage 2025-04-12 23:14:45 UTC
(In reply to Trev from comment #4)

devel/py-wheel044 is only a build-time dependency required by one port (setuptools).
Please remove py311-wheel044 and py311-wheel and proceed.
Alternatively, use poudriere and you won't see such problems.
poudriere is considered a gold standard when it comes to building packages on FreeBSD.
Not a single port currently fails in poudriere due to the wheel044 conflict.
Comment 6 Trev 2025-04-13 06:09:46 UTC
(In reply to Yuri Victorovich from comment #5)

Thanks Yuri, I'm aware of poudriere. 

If I wasn't running FreeBSD 13 and 14 on a stable of old Apple Mac minis (the latest being a 2012 model) I would use poudriere but that is what I'm doing and to use poudriere instead would be too great a time sink.
Comment 7 Oclair 2025-04-13 06:58:39 UTC
Please avoid promoting Poudriere as a means to justify not bothering to research bugs within the FreeBSD Ports.
Thank You for your contributions to FreeBSD.
Comment 8 Yuri Victorovich freebsd_committer freebsd_triage 2025-04-13 09:32:43 UTC
(In reply to Oclair from comment #7)

There's not much to research here.

The commit message explains why devel/py-wheel044 was added:

commit de7c5ca4a2d40df82a8ca46b37c8b859a412b89c
Author: Charlie Li <vishwin@FreeBSD.org>
Date:   Sat Apr 5 13:12:38 2025

    devel/py-wheel044: "temporarily" add
    
    The sole purpose of this port is to build setuptools < 70.1.0 under
    USE_PYTHON=pep517, as a stopgap to allow newer Python
    distributions/interpreters to land while the setuptools update
    continues to be worked on. This port will be removed once setuptools
    is updated. Nothing else is to declare this as a dependency; continue
    to use devel/py-wheel elsewhere.
    
    As of setuptools 70.1.0, bdist_wheel (what setuptools executes as
    part of ${PEP517_BUILD_CMD} to build the wheel) has moved from wheel
    to setuptools [0], so once setuptools is updated past said version,
    consumers should not continue declaring devel/py-wheel in BUILD_DEPENDS
    unless the package needs functionality beyond what moved into
    setuptools.
    
    [0] https://setuptools.pypa.io/en/latest/history.html#v70-1-0
    
    PR: 271673, 274671

The current version of setuptools in the ports tree fails to build with the current version of wheel.
Comment 9 Trev 2025-04-13 11:04:09 UTC
A note in /usr/ports/UPDATING would be helpful.