Bug 2483710 - snakemake fails to build with Python 3.15: help2man: can't get `--help' info from snakemake
Summary: snakemake fails to build with Python 3.15: help2man: can't get `--help' info ...
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Fedora
Classification: Fedora
Component: snakemake
Version: rawhide
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Orphan Owner
QA Contact:
URL:
Whiteboard:
: 2483717 (view as bug list)
Depends On:
Blocks: PYTHON3.15
TreeView+ depends on / blocked
 
Reported: 2026-06-01 09:34 UTC by Karolina Surma
Modified: 2026-06-10 01:08 UTC (History)
4 users (show)

Fixed In Version: snakemake-9.21.1-2.fc44 snakemake-9.21.1-2.fc43
Clone Of:
Environment:
Last Closed: 2026-06-10 00:55:40 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Karolina Surma 2026-06-01 09:34:44 UTC
snakemake fails to build with Python 3.15.0b1.

+ help2man --no-info '--name=Metapackage for snakemake: reports extras' snakemake
help2man: can't get `--help' info from snakemake

https://docs.python.org/3.15/whatsnew/3.15.html

For the build logs, see:
https://copr-be.cloud.fedoraproject.org/results/@python/python3.15-b1/fedora-rawhide-x86_64/10513608-snakemake/

For all our attempts to build snakemake with Python 3.15, see:
https://copr.fedorainfracloud.org/coprs/g/python/python3.15-b1/package/snakemake/

Testing and mass rebuild of packages is happening in copr.
You can follow these instructions to test locally in mock if your package builds with Python 3.15:
https://copr.fedorainfracloud.org/coprs/g/python/python3.15-b1/

Let us know here if you have any questions.

Python 3.15 is planned to be included in Fedora 45.
To make that update smoother, we're building Fedora packages with all pre-releases of Python 3.15.
A build failure prevents us from testing all dependent packages (transitive [Build]Requires),
so if this package is required a lot, it's important for us to get it fixed soon.

We'd appreciate help from the people who know this package best,
but if you don't want to work on this now, let us know so we can try to work around it on our side.

Comment 1 Ben Beasley 2026-06-01 11:03:13 UTC
Hmm. This reveals that the man page has the wrong title (“name”) because the Summary from the subpackage defined by the expansion of

  %pyproject_extras_subpkg -n snakemake reports

differs from the base package’s Summary, and so the expansion of %{summary} in the help2man invocation doesn’t work as expected. I’ll fix that, but it’s a pre-existing problem.

If I strip away the help2man layer and just invoke "snakemake --help" with the same PATH and PYTHONPATH, here’s the underlying traceback.

+ snakemake --help
Error in import line from /usr/lib/python3.15/site-packages/google_cloud_core-2.3.3-py3.15-nspkg.pth: import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('google'
,));importlib = __import__('importlib.util');__import__('importlib.machinery');m = sys.modules.setdefault('google', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec(
'google', [os.path.dirname(p)])));m = m or sys.modules.setdefault('google', types.ModuleType('google'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p
)
  Traceback (most recent call last):
    File "<frozen site>", line 319, in _exec_imports
    File "<string>", line 1, in <module>
  KeyError: "local variable ''sitedir'' is not defined"
Error in import line from /usr/lib/python3.15/site-packages/google_cloud_core-2.3.3-py3.15-nspkg.pth: import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('google', 'cloud'));importlib = __import__('importlib.util');__import__('importlib.machinery');m = sys.modules.setdefault('google.cloud', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('google.cloud', [os.path.dirname(p)])));m = m or sys.modules.setdefault('google.cloud', types.ModuleType('google.cloud'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p);m and setattr(sys.modules['google'], 'cloud', m)
  Traceback (most recent call last):
    File "<frozen site>", line 319, in _exec_imports
    File "<string>", line 1, in <module>
  KeyError: "local variable ''sitedir'' is not defined"
Error in import line from /usr/lib/python3.15/site-packages/protobuf-3.19.6-py3.15-nspkg.pth: import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('google',));importlib = __import__('importlib.util');__import__('importlib.machinery');m = sys.modules.setdefault('google', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('google', [os.path.dirname(p)])));m = m or sys.modules.setdefault('google', types.ModuleType('google'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)
  Traceback (most recent call last):
    File "<frozen site>", line 319, in _exec_imports
    File "<string>", line 1, in <module>
  KeyError: "local variable ''sitedir'' is not defined"
Traceback (most recent call last):

  File "/usr/lib64/python3.15/argparse.py", line 2880, in print_help
    help_text = self.format_help(formatter=formatter)

TypeError: ArgumentParser.format_help() got an unexpected keyword argument 'formatter'


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

  File "/builddir/build/BUILD/snakemake-9.21.1-build/BUILDROOT/usr/lib/python3.15/site-packages/snakemake/cli.py", line 2391, in main
    parser, args = parse_args(argv)
                   ~~~~~~~~~~^^^^^^

  File "/builddir/build/BUILD/snakemake-9.21.1-build/BUILDROOT/usr/lib/python3.15/site-packages/snakemake/cli.py", line 1904, in parse_args
    args = parser.parse_args(argv)

  File "/usr/lib/python3.15/site-packages/configargparse.py", line 1048, in parse_args
    args, argv = self.parse_known_args(
                 ~~~~~~~~~~~~~~~~~~~~~^
        args=args,
        ^^^^^^^^^^
    ...<3 lines>...
        ignore_help_args=False,
        ^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^

  File "/usr/lib/python3.15/site-packages/configargparse.py", line 1266, in parse_known_args
    namespace, unknown_args = argparse.ArgumentParser.parse_known_args(
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        self, args=args, namespace=namespace
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^

  File "/usr/lib64/python3.15/argparse.py", line 2128, in parse_known_args
    return self._parse_known_args2(args, namespace, intermixed=False)
           ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/lib64/python3.15/argparse.py", line 2157, in _parse_known_args2
    namespace, args = self._parse_known_args(args, namespace, intermixed)
                      ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/lib64/python3.15/argparse.py", line 2408, in _parse_known_args
    start_index = consume_optional(start_index)

  File "/usr/lib64/python3.15/argparse.py", line 2332, in consume_optional
    take_action(action, args, option_string)
    ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/lib64/python3.15/argparse.py", line 2233, in take_action
    action(self, namespace, argument_values, option_string)
    ~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/usr/lib64/python3.15/argparse.py", line 1281, in __call__
    parser.print_help()
    ~~~~~~~~~~~~~~~~~^^

  File "/usr/lib64/python3.15/argparse.py", line 2884, in print_help
    help_text = self.format_help()

  File "/usr/lib/python3.15/site-packages/configargparse.py", line 1696, in format_help
    return argparse.ArgumentParser.format_help(self) + (
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^

  File "/usr/lib64/python3.15/argparse.py", line 2841, in format_help
    return formatter.format_help()
           ~~~~~~~~~~~~~~~~~~~~~^^

  File "/usr/lib64/python3.15/argparse.py", line 340, in format_help
    help = self._root_section.format_help()

  File "/usr/lib64/python3.15/argparse.py", line 265, in format_help
    item_help = join([func(*args) for func, args in self.items])
                      ~~~~^^^^^^^

  File "/usr/lib64/python3.15/argparse.py", line 265, in format_help
    item_help = join([func(*args) for func, args in self.items])
                      ~~~~^^^^^^^

  File "/usr/lib64/python3.15/argparse.py", line 614, in _format_action
    help_text = self._expand_help(action)

  File "/usr/lib64/python3.15/argparse.py", line 714, in _expand_help
    help_string = self._get_help_string(action)

  File "/builddir/build/BUILD/snakemake-9.21.1-build/BUILDROOT/usr/lib/python3.15/site-packages/snakemake/common/argparse.py", line 76, in _get_help_string
    and not isinstance(action.default, dataclasses._MISSING_TYPE)
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^

AttributeError: module 'dataclasses' has no attribute '_MISSING_TYPE'

The TypeError is supposed to happen, but it is supposed to be caught: https://github.com/python/cpython/blob/f31a89bb901067dd105b00cfa90523cf7ffdbbdd/Lib/argparse.py#L2877-L2882; that’s all in the Python standard library. But then the AttributeError on _MISSING_TYPE happens, and that’s the bug in Snakemake. It looks like this is due to https://github.com/python/cpython/pull/149086 (and Snakemake using a non-public API).

I offered upstream a PR that would fix this, https://github.com/snakemake/snakemake/pull/4211, but I noted in the PR text that my approach isn’t obviously the best one, and it doesn’t remove the reliance on implementation-defined behavior.

I’m strongly considering orphaning the Snakemake stack and related packages in the next few days, for reasons that I’ll write up in a separate bug if and when I do so.

Comment 2 Ben Beasley 2026-06-01 11:17:18 UTC
*** Bug 2483717 has been marked as a duplicate of this bug. ***

Comment 3 Fedora Update System 2026-06-01 12:32:50 UTC
FEDORA-2026-e11f2ecdad (snakemake-9.21.1-2.fc44) has been submitted as an update to Fedora 44.
https://bodhi.fedoraproject.org/updates/FEDORA-2026-e11f2ecdad

Comment 4 Fedora Update System 2026-06-01 13:15:56 UTC
FEDORA-2026-1cb62e2f46 (snakemake-9.21.1-2.fc43) has been submitted as an update to Fedora 43.
https://bodhi.fedoraproject.org/updates/FEDORA-2026-1cb62e2f46

Comment 5 Fedora Update System 2026-06-02 01:35:23 UTC
FEDORA-2026-e11f2ecdad has been pushed to the Fedora 44 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf upgrade --enablerepo=updates-testing --refresh --advisory=FEDORA-2026-e11f2ecdad`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2026-e11f2ecdad

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 6 Fedora Update System 2026-06-02 01:53:06 UTC
FEDORA-2026-1cb62e2f46 has been pushed to the Fedora 43 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf upgrade --enablerepo=updates-testing --refresh --advisory=FEDORA-2026-1cb62e2f46`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2026-1cb62e2f46

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 7 Fedora Admin user for bugzilla script actions 2026-06-02 03:56:51 UTC
This package has changed maintainer in Fedora. Reassigning to the new maintainer of this component.

Comment 8 Fedora Update System 2026-06-10 00:55:40 UTC
FEDORA-2026-e11f2ecdad (snakemake-9.21.1-2.fc44) has been pushed to the Fedora 44 stable repository.
If problem still persists, please make note of it in this bug report.

Comment 9 Fedora Update System 2026-06-10 01:08:56 UTC
FEDORA-2026-1cb62e2f46 (snakemake-9.21.1-2.fc43) has been pushed to the Fedora 43 stable repository.
If problem still persists, please make note of it in this bug report.


Note You need to log in before you can comment on or make changes to this bug.