Collecting PyMuPDF
Downloading pymupdf-1.27.2.3.tar.gz (85.8 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 85.8/85.8 MB 19.7 MB/s 0:00:04
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'done'
Installing backend dependencies: started
Installing backend dependencies: finished with status 'done'
Preparing metadata (pyproject.toml): started
Preparing metadata (pyproject.toml): finished with status 'error'
error: subprocess-exited-with-error
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [153 lines of output]
[+0.0s] setup.py:219: <module>(): ### Starting.
[+0.0s] setup.py:220: <module>(): os.getcwd()='/tmp/pip-install-ovy0eg2a/pymupdf_5ebe2c11ea894ebe9d005a9383f802b8'
[+0.0s] setup.py:220: <module>(): platform.machine()='x86_64'
[+0.0s] setup.py:220: <module>(): platform.platform()='Linux-7.1.0-0.rc1.260501g26fd6bff2c050.13.fc45.x86_64-x86_64-with-glibc2.43.9000'
[+0.0s] setup.py:220: <module>(): platform.python_implementation()='CPython'
[+0.0s] setup.py:220: <module>(): platform.python_version()='3.15.0b2'
[+0.0s] setup.py:220: <module>(): platform.system()='Linux'
[+0.0s] setup.py:220: <module>(): platform.uname()=uname_result(system='Linux', node='pretty', release='7.1.0-0.rc1.260501g26fd6bff2c050.13.fc45.x86_64', version='#1 SMP PREEMPT_DYNAMIC Fri May 1 15:31:52 UTC 2026', machine='x86_64')
[+0.0s] setup.py:220: <module>(): sys.executable='/home/cc/venv/bin/python3.15t'
[+0.0s] setup.py:220: <module>(): sys.version='3.15.0b2 free-threading build (main, Jun 10 2026, 00:00:00) [GCC 16.1.1 20260515 (Red Hat 16.1.1-2)]'
[+0.0s] setup.py:220: <module>(): sys.version_info=sys.version_info(major=3, minor=15, micro=0, releaselevel='beta', serial=2)
[+0.0s] setup.py:220: <module>(): list(sys.version_info)=[3, 15, 0, 'beta', 2]
[+0.0s] setup.py:220: <module>(): sys.prefix='/home/cc/venv'
[+0.0s] setup.py:220: <module>(): sys.base_prefix='/usr'
[+0.0s] setup.py:220: <module>(): sysconfig.get_config_var("Py_GIL_DISABLED")=1
[+0.0s] setup.py:220: <module>(): sys._is_gil_enabled()=False
[+0.1s] setup.py:220: <module>(): CPU bits: 64
[+0.1s] setup.py:220: <module>(): sys.argv (3):
[+0.1s] setup.py:220: <module>(): 0: '/home/cc/venv/lib64/python3.15t/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py'
[+0.1s] setup.py:220: <module>(): 1: 'prepare_metadata_for_build_wheel'
[+0.1s] setup.py:220: <module>(): 2: '/tmp/tmpmbe2kj0h'
[+0.1s] setup.py:220: <module>(): os.environ (111):
[+0.1s] setup.py:220: <module>(): BASH_ENV: '/usr/share/lmod/lmod/init/bash'
[+0.1s] setup.py:220: <module>(): BASH_FUNC_ml%%: '() { eval "$($LMOD_DIR/ml_cmd "$@")"\n}'
[+0.1s] setup.py:220: <module>(): BASH_FUNC_module%%: '() { if [ -z "${LMOD_SH_DBG_ON+x}" ]; then\n case "$-" in \n *v*x*)\n __lmod_sh_dbg=\'vx\'\n ;;\n *v*)\n __lmod_sh_dbg=\'v\'\n ;;\n *x*)\n __lmod_sh_dbg=\'x\'\n ;;\n esac;\n fi;\n if [ -n "${__lmod_sh_dbg:-}" ]; then\n set +$__lmod_sh_dbg;\n echo "Shell debugging temporarily silenced: export LMOD_SH_DBG_ON=1 for Lmod\'s output" 1>&2;\n fi;\n eval "$($LMOD_CMD shell "$@")" && eval "$(${LMOD_SETTARG_CMD:-:} -s sh)";\n __lmod_my_status=$?;\n if [ -n "${__lmod_sh_dbg:-}" ]; then\n echo "Shell debugging restarted" 1>&2;\n set -$__lmod_sh_dbg;\n fi;\n unset __lmod_sh_dbg;\n return $__lmod_my_status\n}'
[+0.1s] setup.py:220: <module>(): COLORFGBG: '15;0'
[+0.1s] setup.py:220: <module>(): COLORTERM: 'truecolor'
[+0.1s] setup.py:220: <module>(): DBUS_SESSION_BUS_ADDRESS: 'unix:path=/run/user/1000/bus'
[+0.1s] setup.py:220: <module>(): DEBUGINFOD_IMA_CERT_PATH: '/etc/keys/ima:'
[+0.1s] setup.py:220: <module>(): DEBUGINFOD_URLS: 'ima:enforcing https://debuginfod.fedoraproject.org/ ima:ignore '
[+0.1s] setup.py:220: <module>(): DESKTOP_SESSION: '/usr/share/wayland-sessions/plasma.desktop'
[+0.1s] setup.py:220: <module>(): DISPLAY: ':0'
[+0.1s] setup.py:220: <module>(): EDITOR: '/usr/bin/nano'
[+0.1s] setup.py:220: <module>(): FLATPAK_TTY_PROGRESS: '1'
[+0.1s] setup.py:220: <module>(): FNM_ARCH: 'x64'
[+0.1s] setup.py:220: <module>(): FNM_COREPACK_ENABLED: 'false'
[+0.1s] setup.py:220: <module>(): FNM_DIR: '/home/cc/.local/share/fnm'
[+0.1s] setup.py:220: <module>(): FNM_LOGLEVEL: 'info'
[+0.1s] setup.py:220: <module>(): FNM_MULTISHELL_PATH: '/run/user/1000/fnm_multishells/9175_1781361963608'
[+0.1s] setup.py:220: <module>(): FNM_NODE_DIST_MIRROR: 'https://nodejs.org/dist'
[+0.1s] setup.py:220: <module>(): FNM_RESOLVE_ENGINES: 'false'
[+0.1s] setup.py:220: <module>(): FNM_VERSION_FILE_STRATEGY: 'local'
[+0.1s] setup.py:220: <module>(): FPATH: '/usr/share/lmod/lmod/init/ksh_funcs'
[+0.1s] setup.py:220: <module>(): GDK_CORE_DEVICE_EVENTS: '1'
[+0.1s] setup.py:220: <module>(): GPG_TTY: '/dev/pts/1'
[+0.1s] setup.py:220: <module>(): GTK2_RC_FILES: '/home/cc/.gtkrc-2.0-kde4'
[+0.1s] setup.py:220: <module>(): GTK_RC_FILES: '/etc/gtk/gtkrc:/home/cc/.gtkrc:/home/cc/.config/gtkrc'
[+0.1s] setup.py:220: <module>(): HISTCONTROL: 'ignoredups'
[+0.1s] setup.py:220: <module>(): HISTSIZE: '1000'
[+0.1s] setup.py:220: <module>(): HOME: '/home/cc'
[+0.1s] setup.py:220: <module>(): HOSTNAME: 'pretty'
[+0.1s] setup.py:220: <module>(): ICEAUTHORITY: '/run/user/1000/iceauth_PmkIgt'
[+0.1s] setup.py:220: <module>(): INVOCATION_ID: '83ad12225ff04906bee77c9437379bde'
[+0.1s] setup.py:220: <module>(): JOURNAL_STREAM: '10:42667'
[+0.1s] setup.py:220: <module>(): KDEDIRS: '/usr'
[+0.1s] setup.py:220: <module>(): KDE_APPLICATIONS_AS_SCOPE: '1'
[+0.1s] setup.py:220: <module>(): KDE_FULL_SESSION: 'true'
[+0.1s] setup.py:220: <module>(): KDE_SESSION_UID: '1000'
[+0.1s] setup.py:220: <module>(): KDE_SESSION_VERSION: '6'
[+0.1s] setup.py:220: <module>(): KONSOLE_DBUS_ACTIVATION_COOKIE: 'BOAovUg8z1mQQuA5nNhnrVq9tmB/h/T/Bg/YvnDrH4k='
[+0.1s] setup.py:220: <module>(): KONSOLE_DBUS_SERVICE: ':1.103'
[+0.1s] setup.py:220: <module>(): KONSOLE_DBUS_SESSION: '/Sessions/1'
[+0.1s] setup.py:220: <module>(): KONSOLE_DBUS_WINDOW: '/Windows/1'
[+0.1s] setup.py:220: <module>(): KONSOLE_VERSION: '260770'
[+0.1s] setup.py:220: <module>(): LANG: 'en_US.utf8'
[+0.1s] setup.py:220: <module>(): LESSOPEN: '||/usr/bin/lesspipe.sh %s'
[+0.1s] setup.py:220: <module>(): LMOD_CMD: '/usr/share/lmod/lmod/libexec/lmod'
[+0.2s] setup.py:220: <module>(): LMOD_DIR: '/usr/share/lmod/lmod/libexec'
[+0.2s] setup.py:220: <module>(): LMOD_PKG: '/usr/share/lmod/lmod'
[+0.2s] setup.py:220: <module>(): LMOD_ROOT: '/usr/share/lmod'
[+0.2s] setup.py:220: <module>(): LMOD_SETTARG_FULL_SUPPORT: 'no'
[+0.2s] setup.py:220: <module>(): LMOD_VERSION: '9.2'
[+0.2s] setup.py:220: <module>(): LMOD_sys: 'Linux'
[+0.2s] setup.py:220: <module>(): LOGNAME: 'cc'
[+0.2s] setup.py:220: <module>(): LS_COLORS: 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.7z=01;31:*.ace=01;31:*.alz=01;31:*.apk=01;31:*.arc=01;31:*.arj=01;31:*.bz=01;31:*.bz2=01;31:*.cab=01;31:*.cpio=01;31:*.crate=01;31:*.deb=01;31:*.drpm=01;31:*.dwm=01;31:*.dz=01;31:*.ear=01;31:*.egg=01;31:*.esd=01;31:*.gz=01;31:*.jar=01;31:*.lha=01;31:*.lrz=01;31:*.lz=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.lzo=01;31:*.pyz=01;31:*.rar=01;31:*.rpm=01;31:*.rz=01;31:*.sar=01;31:*.swm=01;31:*.t7z=01;31:*.tar=01;31:*.taz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tgz=01;31:*.tlz=01;31:*.txz=01;31:*.tz=01;31:*.tzo=01;31:*.tzst=01;31:*.udeb=01;31:*.war=01;31:*.whl=01;31:*.wim=01;31:*.xz=01;31:*.z=01;31:*.zip=01;31:*.zoo=01;31:*.zst=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.jxl=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:'
[+0.2s] setup.py:220: <module>(): MAIL: '/var/spool/mail/cc'
[+0.2s] setup.py:220: <module>(): MANAGERPID: '4527'
[+0.2s] setup.py:220: <module>(): MANAGERPIDFDID: '49394'
[+0.2s] setup.py:220: <module>(): MANPATH: '/usr/share/lmod/lmod/share/man:'
[+0.2s] setup.py:220: <module>(): MEMORY_PRESSURE_WATCH: '/sys/fs/cgroup/user.slice/user-1000.slice/user@1000.service/app.slice/flatpak-session-helper.service/memory.pressure'
[+0.2s] setup.py:220: <module>(): MEMORY_PRESSURE_WRITE: 'c29tZSAyMDAwMDAgMjAwMDAwMAA='
[+0.2s] setup.py:220: <module>(): MODULEPATH: '/etc/modulefiles:/usr/share/modulefiles:/usr/share/modulefiles/Linux:/usr/share/modulefiles/Core:/usr/share/lmod/lmod/modulefiles/Core'
[+0.2s] setup.py:220: <module>(): MODULEPATH_ROOT: '/usr/share/modulefiles'
[+0.2s] setup.py:220: <module>(): MODULESHOME: '/usr/share/lmod/lmod'
[+0.2s] setup.py:220: <module>(): NVM_CD_FLAGS: ''
[+0.2s] setup.py:220: <module>(): NVM_DIR: '/home/cc/.config/nvm'
[+0.2s] setup.py:220: <module>(): NVM_RC_VERSION: ''
[+0.2s] setup.py:220: <module>(): PAM_KWALLET5_LOGIN: '/run/user/1000/kwallet5.socket'
[+0.2s] setup.py:220: <module>(): PATH: '/tmp/pip-build-env-ed9l0q5c/overlay/bin:/tmp/pip-build-env-ed9l0q5c/normal/bin:/home/cc/venv/bin:/opt/gcc-latest/bin:/run/user/1000/fnm_multishells/9175_1781361963608/bin:/home/cc/.local/share/fnm:/home/cc/perl5/bin:/home/cc/.cargo/bin:/opt/gcc-latest/bin:/run/user/1000/fnm_multishells/5358_1781361906957/bin:/home/cc/.local/share/fnm:/home/cc/perl5/bin:/home/cc/.local/bin:/home/cc/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin'
[+0.2s] setup.py:220: <module>(): PERL5LIB: '/home/cc/perl5/lib/perl5:/home/cc/perl5/lib/perl5'
[+0.2s] setup.py:220: <module>(): PERL_LOCAL_LIB_ROOT: '/home/cc/perl5:/home/cc/perl5'
[+0.2s] setup.py:220: <module>(): PERL_MB_OPT: '--install_base "/home/cc/perl5"'
[+0.2s] setup.py:220: <module>(): PERL_MM_OPT: 'INSTALL_BASE=/home/cc/perl5'
[+0.2s] setup.py:220: <module>(): PIP_BUILD_TRACKER: '/tmp/pip-build-tracker-al09r2r0'
[+0.2s] setup.py:220: <module>(): PROFILEHOME: ''
[+0.2s] setup.py:220: <module>(): PS1: '(venv) ${PROMPT_START@P}\\[\\e[0m\\]${PROMPT_HIGHLIGHT:+\\[\\e[${PROMPT_HIGHLIGHT}m\\]}${PROMPT_COLOR:+\\[\\e[${PROMPT_COLOR}m\\]}${PROMPT_CONTAINER}${PROMPT_USERHOST:+${PROMPT_USERHOST@P}${PROMPT_SEPARATOR:+\\[\\e[0m\\]${PROMPT_SEPARATOR_COLOR:+\\[\\e[${PROMPT_SEPARATOR_COLOR}m\\]}${PROMPT_SEPARATOR@P}${PROMPT_SEPARATOR_COLOR:+\\[\\e[0m\\]}${PROMPT_HIGHLIGHT:+\\[\\e[${PROMPT_HIGHLIGHT}m\\]}${PROMPT_COLOR:+\\[\\e[${PROMPT_COLOR}m\\]}}}${PROMPT_DIR_COLOR:+\\[\\e[${PROMPT_DIR_COLOR}m\\]}${PROMPT_DIRECTORY@P}${PROMPT_GIT_BRANCH:+${PROMPT_SEPARATOR:+\\[\\e[0m\\]${PROMPT_SEPARATOR_COLOR:+\\[\\e[${PROMPT_SEPARATOR_COLOR}m\\]}${PROMPT_SEPARATOR@P}${PROMPT_SEPARATOR_COLOR:+\\[\\e[0m\\]}${PROMPT_HIGHLIGHT:+\\[\\e[${PROMPT_HIGHLIGHT}m\\]}${PROMPT_COLOR:+\\[\\e[${PROMPT_COLOR}m\\]}${PROMPT_DIR_COLOR:+\\[\\e[${PROMPT_DIR_COLOR}m\\]}}${PROMPT_GIT_COLOR:+\\[\\e[${PROMPT_GIT_COLOR}m\\]}${PROMPT_GIT_BRANCH@P}}\\[\\e[0m\\]${PROMPT_END@P}\\$${PROMPT_END:+\\[\\e[0m\\]} '
[+0.2s] setup.py:220: <module>(): PWD: '/home/cc'
[+0.2s] setup.py:220: <module>(): PYTHONNOUSERSITE: '1'
[+0.2s] setup.py:220: <module>(): PYTHONPATH: '/tmp/pip-build-env-ed9l0q5c/site'
[+0.2s] setup.py:220: <module>(): QT_WAYLAND_RECONNECT: '1'
[+0.2s] setup.py:220: <module>(): SESSION_MANAGER: 'local/unix:@/tmp/.ICE-unix/5774,unix/unix:/tmp/.ICE-unix/5774'
[+0.2s] setup.py:220: <module>(): SHELL: '/bin/bash'
[+0.2s] setup.py:220: <module>(): SHELL_SESSION_ID: '8e53689cb7b34d418472b4761dce4bcd'
[+0.2s] setup.py:220: <module>(): SHLVL: '1'
[+0.2s] setup.py:220: <module>(): SSH_ASKPASS: '/usr/bin/ksshaskpass'
[+0.2s] setup.py:220: <module>(): SSH_AUTH_SOCK: '/run/user/1000/ssh-agent.socket'
[+0.2s] setup.py:220: <module>(): SYSTEMD_EXEC_PID: '8955'
[+0.2s] setup.py:220: <module>(): TERM: 'xterm-256color'
[+0.2s] setup.py:220: <module>(): USER: 'cc'
[+0.2s] setup.py:220: <module>(): VIRTUAL_ENV: '/home/cc/venv'
[+0.2s] setup.py:220: <module>(): VIRTUAL_ENV_PROMPT: 'venv'
[+0.2s] setup.py:220: <module>(): WAYLAND_DISPLAY: 'wayland-0'
[+0.2s] setup.py:220: <module>(): WINDOWID: '94645392117200'
[+0.2s] setup.py:220: <module>(): XAUTHORITY: '/run/user/1000/xauth_ednRGM'
[+0.2s] setup.py:220: <module>(): XDG_CONFIG_DIRS: '/home/cc/.config/kdedefaults:/etc/xdg:/usr/share/kde-settings/kde-profile/default/xdg'
[+0.2s] setup.py:220: <module>(): XDG_CURRENT_DESKTOP: 'KDE'
[+0.2s] setup.py:220: <module>(): XDG_DATA_DIRS: '/home/cc/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share'
[+0.2s] setup.py:220: <module>(): XDG_MENU_PREFIX: 'plasma-'
[+0.3s] setup.py:220: <module>(): XDG_RUNTIME_DIR: '/run/user/1000'
[+0.3s] setup.py:220: <module>(): XDG_SEAT: 'seat0'
[+0.3s] setup.py:220: <module>(): XDG_SEAT_PATH: '/org/freedesktop/DisplayManager/Seat0'
[+0.3s] setup.py:220: <module>(): XDG_SESSION_CLASS: 'user'
[+0.3s] setup.py:220: <module>(): XDG_SESSION_DESKTOP: 'KDE'
[+0.3s] setup.py:220: <module>(): XDG_SESSION_ID: '2'
[+0.3s] setup.py:220: <module>(): XDG_SESSION_PATH: '/org/freedesktop/DisplayManager/Session1'
[+0.3s] setup.py:220: <module>(): XDG_SESSION_TYPE: 'wayland'
[+0.3s] setup.py:220: <module>(): XDG_VTNR: '2'
[+0.3s] setup.py:220: <module>(): XKB_DEFAULT_LAYOUT: 'us,il'
[+0.3s] setup.py:220: <module>(): XKB_DEFAULT_VARIANT: ','
[+0.3s] setup.py:220: <module>(): _: '/usr/bin/xargs'
[+0.3s] setup.py:220: <module>(): _JAVA_AWT_WM_NONREPARENTING: '1'
[+0.3s] setup.py:220: <module>(): _PYPROJECT_HOOKS_BACKEND_PATH: '/tmp/pip-install-ovy0eg2a/pymupdf_5ebe2c11ea894ebe9d005a9383f802b8'
[+0.3s] setup.py:220: <module>(): _PYPROJECT_HOOKS_BUILD_BACKEND: 'setup'
[+0.3s] setup.py:240: <module>(): PYMUPDF_SETUP_URL_WHEEL=None
[+0.3s] setup.py:243: <module>(): PYMUPDF_SETUP_DUMMY=None
Traceback (most recent call last):
File "/home/cc/venv/lib64/python3.15t/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
main()
~~~~^^
File "/home/cc/venv/lib64/python3.15t/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 373, in main
json_out["return_val"] = hook(**hook_input["kwargs"])
~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/cc/venv/lib64/python3.15t/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 178, in prepare_metadata_for_build_wheel
whl_basename = backend.build_wheel(metadata_directory, config_settings)
File "/tmp/pip-build-env-ed9l0q5c/overlay/lib/python3.15t/site-packages/pipcl/__init__.py", line 869, in build_wheel
wheel_name = self.wheel_name()
File "/tmp/pip-build-env-ed9l0q5c/overlay/lib/python3.15t/site-packages/pipcl/__init__.py", line 1118, in wheel_name
ret = f'{_normalise2(self.name)}-{self.version}-{self.tag_python()}-{self.tag_abi()}-{self.tag_platform()}.whl'
~~~~~~~~~~~~^^
File "/tmp/pip-build-env-ed9l0q5c/overlay/lib/python3.15t/site-packages/pipcl/__init__.py", line 1066, in tag_abi
assert Py_GIL_DISABLED != 1, \
^^^^^^^^^^^^^^^^^^^^
AssertionError: self.py_limited_api=True and Py_GIL_DISABLED=1 are not supported together as of 2026-02-20, e.g. see PEP 803 and PEP 809.
[end of output]
https://docs.python.org/3.15/howto/abi3t-migration.html#abi3t-migration-howto