mirror of
https://github.com/qemu/qemu.git
synced 2026-09-22 06:24:26 +00:00
python: upgrade to Python3.12+
With Python3.9 EOL and Python3.10 soon to be EOL (October 2026), and with ... no other supported build platform actually using Python 3.11, require the use of Python3.12 or later. Additionally, as part of this upgrade, remove the use of tomllib from mkvenv as it is now standard in the Python stdlib: leaving this transitional code in causes a regression with mypy which becomes confused about the overloaded use of 'tomllib'. Our current minimum requirements as determined by standard repository packages on supported distributions is as follows: distro EOS python3 pip setuptools sphinx wheel Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> ------------------------------------------------------------------------- centos_stream_9 2026-12-12 3.9.25 21.3.1 53.0.0 3.4.3 0.36.2 centos_stream_9+ 2026-12-12 3.12.13 23.2.1 68.2.2 --- 0.41.2 freebsd -- 3.12.14 23.3.2 63.1.0 9.0.4 0.48.0 ubuntu_24_04 2028-04-23 3.12.3 24.0 68.1.2 7.2.6 0.42.0 centos_stream_10 2030-01-01 3.12.13 23.3.2 69.0.3 7.2.6 0.41.2 alpine_3_21 2026-11-01 3.12.14 24.3.1 70.3.0 8.1.3 0.43.0 debian_13 2028-08-09 3.13.5 25.1.1 78.1.1 8.1.3 0.46.1 fedora_43 2026-12-09 3.14.7 25.1.1 78.1.1 8.2.3 0.45.1 ubuntu_26_04 2031-05-29 3.14.4 25.1.1 78.1.1 8.2.3 0.46.3 fedora_44 2027-06-02 3.14.7 26.0.1 80.10.2 8.2.3 0.45.1 macports -- 3.14.7 26.0.1 80.10.2 9.1.0 0.48.0 alpine_3_22 2027-05-01 3.12.14 25.1.1 80.9.0 8.2.3 0.46.3 alpine_3_23 2027-11-01 3.12.14 25.1.1 80.9.0 8.2.3 0.46.3 openbsd -- 3.14.6 26.2.1 80.9.0 9.1.0 0.48.0 alpine_3_24 2028-06-01 3.14.7 26.1.2 82.0.1 9.1.0 0.47.0 pkgsrc_current -- 3.13.15 26.2.1 84.0.0 9.1.0 0.48.0 CentOS stream 9 note: python3.12, python3.12-pip, python3.12-setuptools and python3.12-wheel are available as optional packages in the standard repository. Sphinx is not available, but can be side-loaded from PyPI using pip3.12. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <20260825215851.1780608-10-jsnow@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com>
This commit is contained in:
@@ -75,6 +75,7 @@ import site
|
||||
import subprocess
|
||||
import sys
|
||||
import sysconfig
|
||||
import tomllib
|
||||
from types import SimpleNamespace
|
||||
from typing import (
|
||||
Any,
|
||||
@@ -134,20 +135,6 @@ except ImportError:
|
||||
HAVE_PACKAGING_VERSION = _import_ok
|
||||
|
||||
|
||||
# Try to load tomllib, with a fallback to tomli.
|
||||
# HAVE_TOMLLIB is checked below, just-in-time, so that mkvenv does not fail
|
||||
# outside the venv or before a potential call to ensurepip in checkpip().
|
||||
_import_ok = True
|
||||
try:
|
||||
import tomllib
|
||||
except ImportError:
|
||||
try:
|
||||
import tomli as tomllib
|
||||
except ImportError:
|
||||
_import_ok = False
|
||||
|
||||
HAVE_TOMLLIB = _import_ok
|
||||
|
||||
# Do not add any mandatory dependencies from outside the stdlib:
|
||||
# This script *must* be usable standalone!
|
||||
|
||||
@@ -261,36 +248,6 @@ class QemuEnvBuilder(venv.EnvBuilder):
|
||||
return sysconfig.get_path("purelib")
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def compute_venv_libpath(context: SimpleNamespace) -> str:
|
||||
"""
|
||||
Compatibility wrapper for context.lib_path for Python < 3.12
|
||||
"""
|
||||
# Python 3.12+, not strictly necessary because it's documented
|
||||
# to be the same as 3.10 code below:
|
||||
if sys.version_info >= (3, 12):
|
||||
return context.lib_path
|
||||
|
||||
# Python 3.10+
|
||||
if "venv" in sysconfig.get_scheme_names():
|
||||
lib_path = sysconfig.get_path(
|
||||
"purelib", scheme="venv", vars={"base": context.env_dir}
|
||||
)
|
||||
assert lib_path is not None
|
||||
return lib_path
|
||||
|
||||
# For Python <= 3.9 we need to hardcode this. Fortunately the
|
||||
# code below was the same in Python 3.6-3.10, so there is only
|
||||
# one case.
|
||||
if sys.platform == "win32":
|
||||
return os.path.join(context.env_dir, "Lib", "site-packages")
|
||||
return os.path.join(
|
||||
context.env_dir,
|
||||
"lib",
|
||||
"python%d.%d" % sys.version_info[:2],
|
||||
"site-packages",
|
||||
)
|
||||
|
||||
def ensure_directories(self, env_dir: DirType) -> SimpleNamespace:
|
||||
logger.debug("ensure_directories(env_dir=%s)", env_dir)
|
||||
self._context = super().ensure_directories(env_dir)
|
||||
@@ -313,7 +270,8 @@ class QemuEnvBuilder(venv.EnvBuilder):
|
||||
assert parent_libpath is not None
|
||||
logger.debug("parent_libpath: %s", parent_libpath)
|
||||
|
||||
our_libpath = self.compute_venv_libpath(context)
|
||||
assert isinstance(context.lib_path, str)
|
||||
our_libpath = context.lib_path
|
||||
logger.debug("our_libpath: %s", our_libpath)
|
||||
|
||||
pth_file = os.path.join(our_libpath, "nested.pth")
|
||||
@@ -810,19 +768,8 @@ def _do_ensure(
|
||||
|
||||
|
||||
def _parse_groups(file: str) -> Dict[str, Dict[str, Any]]:
|
||||
if not HAVE_TOMLLIB:
|
||||
if sys.version_info < (3, 11):
|
||||
raise Ouch("found no usable tomli, please install it")
|
||||
|
||||
raise Ouch(
|
||||
"Python >=3.11 does not have tomllib... what have you done!?"
|
||||
)
|
||||
|
||||
# Use loads() to support both tomli v1.2.x (Ubuntu 22.04,
|
||||
# Debian bullseye-backports) and v2.0.x
|
||||
with open(file, "r", encoding="ascii") as depfile:
|
||||
contents = depfile.read()
|
||||
return tomllib.loads(contents) # type: ignore
|
||||
with open(file, "rb") as depfile:
|
||||
return tomllib.load(depfile)
|
||||
|
||||
|
||||
def ensure_group(
|
||||
|
||||
Reference in New Issue
Block a user