git.schokokeks.org
Repositories
Help
Report an Issue
derivepassphrase.git
Code
Commits
Branches
Tags
Suche
Strukturansicht:
f428ac1
Branches
Tags
documentation-tree
master
unstable/modularize-and-refactor-test-machinery
unstable/ssh-agent-socket-providers
wishlist
0.1.0
0.1.1
0.1.2
0.1.3
0.2.0
0.3.0
0.3.1
0.3.2
0.3.3
0.4.0
0.5.1
0.5.2
derivepassphrase.git
0.x
pycompatibility
index.html
Deployed 74b94268335a to 0.x with MkDocs 1.6.1 and mike 2.1.3
Marco Ricci
commited
f428ac1
at 2025-08-03 22:00:48
index.html
Blame
History
Raw
<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="An almost faithful Python reimplementation of James Coglan's vault."> <meta name="author" content="Marco Ricci"> <link rel="canonical" href="https://the13thletter.info/derivepassphrase/0.x/pycompatibility/"> <link rel="prev" href="../upgrade-notes/"> <link rel="next" href="../wishlist/"> <link rel="icon" href="../assets/images/favicon.png"> <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.16"> <title>Python compatibility - derivepassphrase</title> <link rel="stylesheet" href="../assets/stylesheets/main.7e37652d.min.css"> <style>:root{--md-text-font:"Noto Sans";--md-code-font:"Noto Mono"}</style> <link rel="stylesheet" href="../assets/_mkdocstrings.css"> <link rel="stylesheet" href="../mkdocstrings_recommended_styles.css"> <link rel="stylesheet" href="../wishlist_styling.css"> </head> <body dir="ltr"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#compatibility-of-derivepassphrase-with-different-python-versions" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <div data-md-color-scheme="default" data-md-component="outdated" hidden> </div> <div class="md-container" data-md-component="container"> <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> <div class="md-grid"> <ul class="md-tabs__list"> <li class="md-tabs__item"> <a href=".." class="md-tabs__link"> Overview </a> </li> <li class="md-tabs__item"> <a href="../tutorials/" class="md-tabs__link"> Tutorials & Examples </a> </li> <li class="md-tabs__item"> <a href="../how-tos/" class="md-tabs__link"> How-Tos </a> </li> <li class="md-tabs__item"> <a href="../reference/" class="md-tabs__link"> Reference </a> </li> <li class="md-tabs__item"> <a href="../explanation/" class="md-tabs__link"> Design & Background </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href="../changelog/" class="md-tabs__link"> Changelog </a> </li> <li class="md-tabs__item"> <a href="../wishlist/" class="md-tabs__link"> Wishlist </a> </li> </ul> </div> </nav> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href=".." title="derivepassphrase" class="md-nav__button md-logo" aria-label="derivepassphrase" data-md-component="logo"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> derivepassphrase </label> <div class="md-nav__source"> <a href="https://git.schokokeks.org/derivepassphrase.git" title="Go to repository" class="md-source" data-md-component="source"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path fill="currentColor" d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg> </div> <div class="md-source__repository"> the-13th-letter/derivepassphrase </div> </a> </div> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href=".." class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > <div class="md-nav__link md-nav__container"> <a href="../tutorials/" class="md-nav__link "> <span class="md-ellipsis"> Tutorials & Examples </span> </a> <label class="md-nav__link " for="__nav_2" id="__nav_2_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> Tutorials & Examples </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../tutorials/basic-setup-passphrase/" class="md-nav__link"> <span class="md-ellipsis"> Setting up derivepassphrase vault for three accounts, with a master passphrase </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" > <div class="md-nav__link md-nav__container"> <a href="../how-tos/" class="md-nav__link "> <span class="md-ellipsis"> How-Tos </span> </a> <label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> How-Tos </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../how-tos/ssh-key/" class="md-nav__link"> <span class="md-ellipsis"> How to set up derivepassphrase vault with an SSH key </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > <div class="md-nav__link md-nav__container"> <a href="../reference/" class="md-nav__link "> <span class="md-ellipsis"> Reference </span> </a> <label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" > <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0"> <span class="md-ellipsis"> Man pages </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_2"> <span class="md-nav__icon md-icon"></span> Man pages </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../reference/derivepassphrase.1/" class="md-nav__link"> <span class="md-ellipsis"> derivepassphrase(1) </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase-vault.1/" class="md-nav__link"> <span class="md-ellipsis"> derivepassphrase-vault(1) </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase-export.1/" class="md-nav__link"> <span class="md-ellipsis"> derivepassphrase-export(1) </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase-export-vault.1/" class="md-nav__link"> <span class="md-ellipsis"> derivepassphrase-export-vault(1) </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" > <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0"> <span class="md-ellipsis"> API docs: Module derivepassphrase </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_3"> <span class="md-nav__icon md-icon"></span> API docs: Module derivepassphrase </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../reference/derivepassphrase.cli/" class="md-nav__link"> <span class="md-ellipsis"> Submodule cli </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase.exporter/" class="md-nav__link"> <span class="md-ellipsis"> Subpackage exporter </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase.sequin/" class="md-nav__link"> <span class="md-ellipsis"> Submodule sequin </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase.ssh_agent/" class="md-nav__link"> <span class="md-ellipsis"> Submodule ssh_agent </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase._types/" class="md-nav__link"> <span class="md-ellipsis"> Submodule _types </span> </a> </li> <li class="md-nav__item"> <a href="../reference/derivepassphrase.vault/" class="md-nav__link"> <span class="md-ellipsis"> Submodule vault </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" > <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0"> <span class="md-ellipsis"> Technical prerequisites </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_4"> <span class="md-nav__icon md-icon"></span> Technical prerequisites </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../reference/prerequisites-ssh-key/" class="md-nav__link"> <span class="md-ellipsis"> Using derivepassphrase vault with an SSH key </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > <div class="md-nav__link md-nav__container"> <a href="../explanation/" class="md-nav__link "> <span class="md-ellipsis"> Design & Background </span> </a> <label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0"> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> Design & Background </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../explanation/faq-altered-versions/" class="md-nav__link"> <span class="md-ellipsis"> "altered versions" license requirement </span> </a> </li> <li class="md-nav__item"> <a href="../explanation/faq-vault-interchangable-passphrases/" class="md-nav__link"> <span class="md-ellipsis"> "interchangable passphrases" in vault </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked> <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex=""> <span class="md-ellipsis"> Changelog </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_6"> <span class="md-nav__icon md-icon"></span> Changelog </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../changelog/" class="md-nav__link"> <span class="md-ellipsis"> Changelog </span> </a> </li> <li class="md-nav__item"> <a href="../upgrade-notes/" class="md-nav__link"> <span class="md-ellipsis"> Upgrade notes </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> <span class="md-ellipsis"> Python compatibility </span> <span class="md-nav__icon md-icon"></span> </label> <a href="./" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> Python compatibility </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#py3.14" class="md-nav__link"> <span class="md-ellipsis"> Python 3.14 </span> </a> </li> <li class="md-nav__item"> <a href="#py3.13" class="md-nav__link"> <span class="md-ellipsis"> Python 3.13 </span> </a> </li> <li class="md-nav__item"> <a href="#py3.12" class="md-nav__link"> <span class="md-ellipsis"> Python 3.12 </span> </a> </li> <li class="md-nav__item"> <a href="#py3.11" class="md-nav__link"> <span class="md-ellipsis"> Python 3.11 </span> </a> <nav class="md-nav" aria-label="Python 3.11"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#after-eol-py3.11" class="md-nav__link"> <span class="md-ellipsis"> After end-of-life </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#py3.10" class="md-nav__link"> <span class="md-ellipsis"> Python 3.10 </span> </a> <nav class="md-nav" aria-label="Python 3.10"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#after-eol-py3.10" class="md-nav__link"> <span class="md-ellipsis"> After end-of-life </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#py3.9" class="md-nav__link"> <span class="md-ellipsis"> Python 3.9 </span> </a> <nav class="md-nav" aria-label="Python 3.9"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#after-eol-py3.9" class="md-nav__link"> <span class="md-ellipsis"> After end-of-life </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#py3.8-and-below" class="md-nav__link"> <span class="md-ellipsis"> Python 3.8 and below </span> </a> </li> <li class="md-nav__item"> <a href="#pypy" class="md-nav__link"> <span class="md-ellipsis"> PyPy </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" > <div class="md-nav__link md-nav__container"> <a href="../wishlist/" class="md-nav__link "> <span class="md-ellipsis"> Wishlist </span> </a> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7"> <span class="md-nav__icon md-icon"></span> Wishlist </label> <ul class="md-nav__list" data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#py3.14" class="md-nav__link"> <span class="md-ellipsis"> Python 3.14 </span> </a> </li> <li class="md-nav__item"> <a href="#py3.13" class="md-nav__link"> <span class="md-ellipsis"> Python 3.13 </span> </a> </li> <li class="md-nav__item"> <a href="#py3.12" class="md-nav__link"> <span class="md-ellipsis"> Python 3.12 </span> </a> </li> <li class="md-nav__item"> <a href="#py3.11" class="md-nav__link"> <span class="md-ellipsis"> Python 3.11 </span> </a> <nav class="md-nav" aria-label="Python 3.11"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#after-eol-py3.11" class="md-nav__link"> <span class="md-ellipsis"> After end-of-life </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#py3.10" class="md-nav__link"> <span class="md-ellipsis"> Python 3.10 </span> </a> <nav class="md-nav" aria-label="Python 3.10"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#after-eol-py3.10" class="md-nav__link"> <span class="md-ellipsis"> After end-of-life </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#py3.9" class="md-nav__link"> <span class="md-ellipsis"> Python 3.9 </span> </a> <nav class="md-nav" aria-label="Python 3.9"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#after-eol-py3.9" class="md-nav__link"> <span class="md-ellipsis"> After end-of-life </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#py3.8-and-below" class="md-nav__link"> <span class="md-ellipsis"> Python 3.8 and below </span> </a> </li> <li class="md-nav__item"> <a href="#pypy" class="md-nav__link"> <span class="md-ellipsis"> PyPy </span> </a> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <a href="https://git.schokokeks.org/derivepassphrase.git/raw/master/docs/pycompatibility.md" title="View source of this page" class="md-content__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <h1 id="compatibility-of-derivepassphrase-with-different-python-versions">Compatibility of <code>derivepassphrase</code> with different Python versions<a class="headerlink" href="#compatibility-of-derivepassphrase-with-different-python-versions" title="Permanent link">¶</a></h1> <h2 id="py3.14">Python 3.14<a class="headerlink" href="#py3.14" title="Permanent link">¶</a></h2> <p>Not yet supported. As of 2025-01, Python 3.14 is still in alpha stage.</p> <h2 id="py3.13">Python 3.13<a class="headerlink" href="#py3.13" title="Permanent link">¶</a></h2> <p>Currently supported without any known issues.</p> <h2 id="py3.12">Python 3.12<a class="headerlink" href="#py3.12" title="Permanent link">¶</a></h2> <p>Currently supported without any known issues.</p> <h2 id="py3.11">Python 3.11<a class="headerlink" href="#py3.11" title="Permanent link">¶</a></h2> <p>Currently supported without any known issues.</p> <h3 id="after-eol-py3.11">After end-of-life<a class="headerlink" href="#after-eol-py3.11" title="Permanent link">¶</a></h3> <p>After Python 3.11 reaches end-of-life, future <code>derivepassphrase</code> versions may make use of the following Python functionality:</p> <ul> <li>complex expressions in f-strings</li> <li>type parameter syntax and the <code>type</code> statement</li> </ul> <h2 id="py3.10">Python 3.10<a class="headerlink" href="#py3.10" title="Permanent link">¶</a></h2> <p>Currently supported without any known issues.</p> <p>Some functionality requires backported libraries (<code>tomllib</code>/<code>tomli</code>).</p> <h3 id="after-eol-py3.10">After end-of-life<a class="headerlink" href="#after-eol-py3.10" title="Permanent link">¶</a></h3> <p>After Python 3.10 reaches end-of-life, future <code>derivepassphrase</code> versions may make use of the following Python functionality:</p> <ul> <li>exception groups</li> <li>exception notes</li> <li><a class="autorefs autorefs-external" href="https://docs.python.org/3/library/contextlib.html#contextlib.chdir"><code>contextlib.chdir</code></a></li> </ul> <h2 id="py3.9">Python 3.9<a class="headerlink" href="#py3.9" title="Permanent link">¶</a></h2> <p>Currently supported without any known issues.</p> <p>Some functionality requires backported libraries (<code>tomllib</code>/<code>tomli</code>).</p> <h3 id="after-eol-py3.9">After end-of-life<a class="headerlink" href="#after-eol-py3.9" title="Permanent link">¶</a></h3> <p>After Python 3.9 reaches end-of-life, future <code>derivepassphrase</code> versions may make use of the following Python functionality:</p> <ul> <li>structural pattern matching (<code>match</code>/<code>case</code> blocks)</li> <li>parenthesized <code>with</code> statements</li> </ul> <h2 id="py3.8-and-below">Python 3.8 and below<a class="headerlink" href="#py3.8-and-below" title="Permanent link">¶</a></h2> <p>These versions were never explicitly supported, neither in CPython nor in PyPy. The same versions as for <a href="#py3.9">Python 3.9</a> may work, but this is untested.</p> <h2 id="pypy">PyPy<a class="headerlink" href="#pypy" title="Permanent link">¶</a></h2> <p>As per the respective CPython version above.</p> </article> </div> </div> </main> <footer class="md-footer"> <nav class="md-footer__inner md-grid" aria-label="Footer" > <a href="../upgrade-notes/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Upgrade notes"> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class="md-footer__title"> <span class="md-footer__direction"> Previous </span> <div class="md-ellipsis"> Upgrade notes </div> </div> </a> <a href="../wishlist/" class="md-footer__link md-footer__link--next" aria-label="Next: Bugs &amp; wishlist items"> <div class="md-footer__title"> <span class="md-footer__direction"> Next </span> <div class="md-ellipsis"> Bugs & wishlist items </div> </div> <div class="md-footer__button md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-copyright"> <div class="md-copyright__highlight"> Copyright © 2025 Marco Ricci (the-13th-letter) </div> Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener"> Material for MkDocs </a> and <a href="https://mkdocstrings.github.io/python/" target="_blank" rel="noopener"> mkdocstrings-python </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> </body> </html>