|repostatus| |ci-status| |coverage| |pyversions| |license|
.. |repostatus| image:: https://www.repostatus.org/badges/latest/active.svg
:target: https://www.repostatus.org/#active
:alt: Project Status: Active — The project has reached a stable, usable
state and is being actively developed.
.. |ci-status| image:: https://github.com/jwodder/pyversion-info/actions/workflows/test.yml/badge.svg
:target: https://github.com/jwodder/pyversion-info/actions/workflows/test.yml
:alt: CI Status
.. |coverage| image:: https://codecov.io/gh/jwodder/pyversion-info/branch/master/graph/badge.svg
:target: https://codecov.io/gh/jwodder/pyversion-info
.. |pyversions| image:: https://img.shields.io/pypi/pyversions/pyversion-info.svg
:target: https://pypi.org/project/pyversion-info/
.. |license| image:: https://img.shields.io/github/license/jwodder/pyversion-info.svg
:target: https://opensource.org/licenses/MIT
:alt: MIT License
`GitHub <https://github.com/jwodder/pyversion-info>`_
| `PyPI <https://pypi.org/project/pyversion-info/>`_
| `Documentation <https://pyversion-info.readthedocs.io>`_
| `Issues <https://github.com/jwodder/pyversion-info/issues>`_
| `Changelog <https://github.com/jwodder/pyversion-info/blob/master/CHANGELOG.md>`_
Ever needed to know what Python versions were currently supported, or how many
subversions a given Python version had? Wondering how long until a given
version came out or reached end-of-life? Need to know what CPython versions a
given PyPy version corresponds to? The answers to these and some other
questions can be found with this library.
``pyversion-info`` pulls its data every run from
`jwodder/pyversion-info-data <https://github.com/jwodder/pyversion-info-data>`_
on GitHub. Prerelease versions are not (currently) included. I promise
24-hour turnaround times for keeping the database up-to-date until I am hit by
a bus.
See `the documentation <https://pyversion-info.readthedocs.io>`_ for more
information.
Installation
============
``pyversion-info`` requires Python 3.8 or higher. Just use `pip
<https://pip.pypa.io>`_ for Python 3 (You have pip, right?) to install
``pyversion-info`` and its dependencies::
python3 -m pip install pyversion-info
Examples
========
(The given outputs are current as of 2021-11-04.)
Start out by fetching the database:
>>> from pyversion_info import VersionDatabase
>>> vd = VersionDatabase.fetch()
Get a list of all currently-supported CPython series:
>>> vd.cpython.supported_series()
['3.6', '3.7', '3.8', '3.9', '3.10']
When does 3.11 come out?
>>> vd.cpython.release_date("3.11")
datetime.date(2022, 10, 3)
When does 3.6 reach end-of-life?
>>> vd.cpython.eol_date("3.6")
datetime.date(2021, 12, 23)
Just how many micro versions does 3.9 have, anyway?
>>> vd.cpython.subversions("3.9")
['3.9.0', '3.9.1', '3.9.2', '3.9.3', '3.9.4', '3.9.5', '3.9.6', '3.9.7', '3.9.8', '3.9.9', '3.9.10', '3.9.11']
What major versions of PyPy are there?
>>> vd.pypy.major_versions()
['1', '2', '4', '5', '6', '7']
What CPython series do PyPy 7.3.\* support?
>>> vd.pypy.supported_cpython_series("7.3")
['2.7', '3.6', '3.7', '3.8']
Caveats
=======
The CPython database is generally only updated when an edit is made to a
release schedule PEP. Occasionally, a deadline listed in a PEP is missed, but
the PEP is not updated for a couple days, and so for a brief period this
library will falsely report the given version as released.
Raw data
{
"_id": null,
"home_page": null,
"name": "pyversion-info",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "CPython, PyPy, history, python, python versions",
"author": null,
"author_email": "John Thorvald Wodder II <pyversion-info@varonathe.org>",
"download_url": "https://files.pythonhosted.org/packages/2d/a1/d22f335de8927335e42ead85d85e34cfb16834fbf3fb3591e8e1df93b90f/pyversion_info-1.2.3.tar.gz",
"platform": null,
"description": "|repostatus| |ci-status| |coverage| |pyversions| |license|\n\n.. |repostatus| image:: https://www.repostatus.org/badges/latest/active.svg\n :target: https://www.repostatus.org/#active\n :alt: Project Status: Active \u2014 The project has reached a stable, usable\n state and is being actively developed.\n\n.. |ci-status| image:: https://github.com/jwodder/pyversion-info/actions/workflows/test.yml/badge.svg\n :target: https://github.com/jwodder/pyversion-info/actions/workflows/test.yml\n :alt: CI Status\n\n.. |coverage| image:: https://codecov.io/gh/jwodder/pyversion-info/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/jwodder/pyversion-info\n\n.. |pyversions| image:: https://img.shields.io/pypi/pyversions/pyversion-info.svg\n :target: https://pypi.org/project/pyversion-info/\n\n.. |license| image:: https://img.shields.io/github/license/jwodder/pyversion-info.svg\n :target: https://opensource.org/licenses/MIT\n :alt: MIT License\n\n`GitHub <https://github.com/jwodder/pyversion-info>`_\n| `PyPI <https://pypi.org/project/pyversion-info/>`_\n| `Documentation <https://pyversion-info.readthedocs.io>`_\n| `Issues <https://github.com/jwodder/pyversion-info/issues>`_\n| `Changelog <https://github.com/jwodder/pyversion-info/blob/master/CHANGELOG.md>`_\n\nEver needed to know what Python versions were currently supported, or how many\nsubversions a given Python version had? Wondering how long until a given\nversion came out or reached end-of-life? Need to know what CPython versions a\ngiven PyPy version corresponds to? The answers to these and some other\nquestions can be found with this library.\n\n``pyversion-info`` pulls its data every run from\n`jwodder/pyversion-info-data <https://github.com/jwodder/pyversion-info-data>`_\non GitHub. Prerelease versions are not (currently) included. I promise\n24-hour turnaround times for keeping the database up-to-date until I am hit by\na bus.\n\nSee `the documentation <https://pyversion-info.readthedocs.io>`_ for more\ninformation.\n\n\nInstallation\n============\n``pyversion-info`` requires Python 3.8 or higher. Just use `pip\n<https://pip.pypa.io>`_ for Python 3 (You have pip, right?) to install\n``pyversion-info`` and its dependencies::\n\n python3 -m pip install pyversion-info\n\n\nExamples\n========\n\n(The given outputs are current as of 2021-11-04.)\n\nStart out by fetching the database:\n\n>>> from pyversion_info import VersionDatabase\n>>> vd = VersionDatabase.fetch()\n\nGet a list of all currently-supported CPython series:\n\n>>> vd.cpython.supported_series()\n['3.6', '3.7', '3.8', '3.9', '3.10']\n\nWhen does 3.11 come out?\n\n>>> vd.cpython.release_date(\"3.11\")\ndatetime.date(2022, 10, 3)\n\nWhen does 3.6 reach end-of-life?\n\n>>> vd.cpython.eol_date(\"3.6\")\ndatetime.date(2021, 12, 23)\n\nJust how many micro versions does 3.9 have, anyway?\n\n>>> vd.cpython.subversions(\"3.9\")\n['3.9.0', '3.9.1', '3.9.2', '3.9.3', '3.9.4', '3.9.5', '3.9.6', '3.9.7', '3.9.8', '3.9.9', '3.9.10', '3.9.11']\n\nWhat major versions of PyPy are there?\n\n>>> vd.pypy.major_versions()\n['1', '2', '4', '5', '6', '7']\n\nWhat CPython series do PyPy 7.3.\\* support?\n\n>>> vd.pypy.supported_cpython_series(\"7.3\")\n['2.7', '3.6', '3.7', '3.8']\n\n\nCaveats\n=======\n\nThe CPython database is generally only updated when an edit is made to a\nrelease schedule PEP. Occasionally, a deadline listed in a PEP is missed, but\nthe PEP is not updated for a couple days, and so for a brief period this\nlibrary will falsely report the given version as released.\n",
"bugtrack_url": null,
"license": null,
"summary": "Get information about released & unreleased CPython and PyPy versions",
"version": "1.2.3",
"project_urls": {
"Bug Tracker": "https://github.com/jwodder/pyversion-info/issues",
"Documentation": "https://pyversion-info.readthedocs.io",
"Source Code": "https://github.com/jwodder/pyversion-info"
},
"split_keywords": [
"cpython",
" pypy",
" history",
" python",
" python versions"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "4c570595a4db6915c427396881f135932976248d6da62b90db5f708df0225f29",
"md5": "8589b99ff4414e48c3b0014a8111f5cf",
"sha256": "3e612c289eaeb643485f932a248958bbd6ab7aaf39de69981cbb0b49acb8e1f2"
},
"downloads": -1,
"filename": "pyversion_info-1.2.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8589b99ff4414e48c3b0014a8111f5cf",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 11473,
"upload_time": "2025-08-02T14:21:37",
"upload_time_iso_8601": "2025-08-02T14:21:37.979082Z",
"url": "https://files.pythonhosted.org/packages/4c/57/0595a4db6915c427396881f135932976248d6da62b90db5f708df0225f29/pyversion_info-1.2.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2da1d22f335de8927335e42ead85d85e34cfb16834fbf3fb3591e8e1df93b90f",
"md5": "4c8363d19e6510e6140980fb447ca7ed",
"sha256": "1bb81488426143a1e6da557679e84261c92af7c17044c1eb54259d9f5dbe9ed0"
},
"downloads": -1,
"filename": "pyversion_info-1.2.3.tar.gz",
"has_sig": false,
"md5_digest": "4c8363d19e6510e6140980fb447ca7ed",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 26170,
"upload_time": "2025-08-02T14:21:38",
"upload_time_iso_8601": "2025-08-02T14:21:38.803868Z",
"url": "https://files.pythonhosted.org/packages/2d/a1/d22f335de8927335e42ead85d85e34cfb16834fbf3fb3591e8e1df93b90f/pyversion_info-1.2.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-02 14:21:38",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jwodder",
"github_project": "pyversion-info",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "pyversion-info"
}