[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 34/51] Python: Drop support for Python 3.7
From: |
Paolo Bonzini |
Subject: |
[PULL 34/51] Python: Drop support for Python 3.7 |
Date: |
Thu, 7 Sep 2023 14:59:43 +0200 |
Debian 10 is not anymore a supported distro, since Debian 12 was
released on June 10, 2023. Our supported build platforms as of today
all support at least 3.8 (and all of them except for Ubuntu 20.04
support 3.9):
openSUSE Leap 15.5: 3.6.15 (3.11.2)
CentOS Stream 8: 3.6.8 (3.8.13, 3.9.16, 3.11.4)
CentOS Stream 9: 3.9.17 (3.11.4)
Fedora 37: 3.11.4
Fedora 38: 3.11.4
Debian 11: 3.9.2
Debian 12: 3.11.2
Alpine 3.14, 3.15: 3.9.16
Alpine 3.16, 3.17: 3.10.10
Ubuntu 20.04 LTS: 3.8.10
Ubuntu 22.04 LTS: 3.10.12
NetBSD 9.3: 3.9.13*
FreeBSD 12.4: 3.9.16
FreeBSD 13.1: 3.9.18
OpenBSD 7.2: 3.9.17
Note: NetBSD does not appear to have a default meta-package, but offers
several options, the lowest of which is 3.7.15. However, "python39"
appears to be a pre-requisite to one of the other packages we request
in tests/vm/netbsd.
Since it is safe under our supported platform policy, bump our
minimum supported version of Python to 3.8. The two most interesting
features to have by default include:
- the importlib.metadata module, whose lack is responsible for over 100
lines of code in mkvenv.py
- improvements to asyncio, for example asyncio.CancelledError
inherits from BaseException rather than Exception
In addition, code can now use the assignment operator ':='
Because mypy now learns about importlib.metadata, a small change to
mkvenv.py is needed to pass type checking.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
configure | 8 ++++----
python/Makefile | 8 ++++----
python/scripts/mkvenv.py | 5 ++++-
python/setup.cfg | 7 +++----
python/tests/minreqs.txt | 2 +-
scripts/qapi/mypy.ini | 2 +-
6 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/configure b/configure
index 48ae0fc05ab..e08127045d0 100755
--- a/configure
+++ b/configure
@@ -552,16 +552,16 @@ if test -n "$linux_arch" && ! test -d
"$source_path/linux-headers/asm-$linux_arc
fi
check_py_version() {
- # We require python >= 3.7.
+ # We require python >= 3.8.
# NB: a True python conditional creates a non-zero return code (Failure)
- "$1" -c 'import sys; sys.exit(sys.version_info < (3,7))'
+ "$1" -c 'import sys; sys.exit(sys.version_info < (3,8))'
}
first_python=
if test -z "${PYTHON}"; then
# A bare 'python' is traditionally python 2.x, but some distros
# have it as python 3.x, so check in both places.
- for binary in python3 python python3.11 python3.10 python3.9 python3.8
python3.7; do
+ for binary in python3 python python3.11 python3.10 python3.9 python3.8; do
if has "$binary"; then
python=$(command -v "$binary")
if check_py_version "$python"; then
@@ -952,7 +952,7 @@ then
fi
if ! check_py_version "$python"; then
- error_exit "Cannot use '$python', Python >= 3.7 is required." \
+ error_exit "Cannot use '$python', Python >= 3.8 is required." \
"Use --python=/path/to/python to specify a supported Python." \
"Maybe try:" \
" openSUSE Leap 15.3+: zypper install python39" \
diff --git a/python/Makefile b/python/Makefile
index 7c70dcc8d14..1fa4ba2498e 100644
--- a/python/Makefile
+++ b/python/Makefile
@@ -9,13 +9,13 @@ help:
@echo "make check-minreqs:"
@echo " Run tests in the minreqs virtual environment."
@echo " These tests use the oldest dependencies."
- @echo " Requires: Python 3.7"
- @echo " Hint (Fedora): 'sudo dnf install python3.7'"
+ @echo " Requires: Python 3.8"
+ @echo " Hint (Fedora): 'sudo dnf install python3.8'"
@echo ""
@echo "make check-tox:"
@echo " Run tests against multiple python versions."
@echo " These tests use the newest dependencies."
- @echo " Requires: Python 3.7 - 3.11, and tox."
+ @echo " Requires: Python 3.8 - 3.11, and tox."
@echo " Hint (Fedora): 'sudo dnf install python3-tox python3.11'"
@echo " The variable QEMU_TOX_EXTRA_ARGS can be use to pass extra"
@echo " arguments to tox".
@@ -59,7 +59,7 @@ PIP_INSTALL = pip install --disable-pip-version-check
min-venv: $(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate
$(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate: setup.cfg
tests/minreqs.txt
@echo "VENV $(QEMU_MINVENV_DIR)"
- @python3.7 -m venv $(QEMU_MINVENV_DIR)
+ @python3.8 -m venv $(QEMU_MINVENV_DIR)
@( \
echo "ACTIVATE $(QEMU_MINVENV_DIR)"; \
. $(QEMU_MINVENV_DIR)/bin/activate; \
diff --git a/python/scripts/mkvenv.py b/python/scripts/mkvenv.py
index 4f2349fbb65..57a24948031 100644
--- a/python/scripts/mkvenv.py
+++ b/python/scripts/mkvenv.py
@@ -435,6 +435,7 @@ def _gen_importlib(packages: Sequence[str]) ->
Iterator[str]:
try:
# First preference: Python 3.8+ stdlib
from importlib.metadata import ( # type: ignore
+ EntryPoint,
PackageNotFoundError,
distribution,
)
@@ -442,6 +443,7 @@ def _gen_importlib(packages: Sequence[str]) ->
Iterator[str]:
logger.debug("%s", str(exc))
# Second preference: Commonly available PyPI backport
from importlib_metadata import ( # type: ignore
+ EntryPoint,
PackageNotFoundError,
distribution,
)
@@ -449,7 +451,8 @@ def _gen_importlib(packages: Sequence[str]) ->
Iterator[str]:
def _generator() -> Iterator[str]:
for package in packages:
try:
- entry_points = distribution(package).entry_points
+ entry_points: Iterator[EntryPoint] = \
+ iter(distribution(package).entry_points)
except PackageNotFoundError:
continue
diff --git a/python/setup.cfg b/python/setup.cfg
index e74b58a8c24..f6d2d8a1362 100644
--- a/python/setup.cfg
+++ b/python/setup.cfg
@@ -14,7 +14,6 @@ classifiers =
Natural Language :: English
Operating System :: OS Independent
Programming Language :: Python :: 3 :: Only
- Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
@@ -22,7 +21,7 @@ classifiers =
Typing :: Typed
[options]
-python_requires = >= 3.7
+python_requires = >= 3.8
packages =
qemu.qmp
qemu.machine
@@ -76,7 +75,7 @@ exclude = __pycache__,
[mypy]
strict = True
-python_version = 3.7
+python_version = 3.8
warn_unused_configs = True
namespace_packages = True
warn_unused_ignores = False
@@ -192,7 +191,7 @@ multi_line_output=3
# of python available on your system to run this test.
[tox:tox]
-envlist = py37, py38, py39, py310, py311
+envlist = py38, py39, py310, py311
skip_missing_interpreters = true
[testenv]
diff --git a/python/tests/minreqs.txt b/python/tests/minreqs.txt
index 979461be6bb..a3f423efd84 100644
--- a/python/tests/minreqs.txt
+++ b/python/tests/minreqs.txt
@@ -1,5 +1,5 @@
# This file lists the ***oldest possible dependencies*** needed to run
-# "make check" successfully under ***Python 3.7***. It is used primarily
+# "make check" successfully under ***Python 3.8***. It is used primarily
# by GitLab CI to ensure that our stated minimum versions in setup.cfg
# are truthful and regularly validated.
#
diff --git a/scripts/qapi/mypy.ini b/scripts/qapi/mypy.ini
index 3463307ddc7..56e0dfb1327 100644
--- a/scripts/qapi/mypy.ini
+++ b/scripts/qapi/mypy.ini
@@ -1,7 +1,7 @@
[mypy]
strict = True
disallow_untyped_calls = False
-python_version = 3.7
+python_version = 3.8
[mypy-qapi.schema]
disallow_untyped_defs = False
--
2.41.0
- [PULL 19/51] contrib/plugins: add Darwin support, (continued)
- [PULL 19/51] contrib/plugins: add Darwin support, Paolo Bonzini, 2023/09/07
- [PULL 22/51] configure: remove HOST_CC, Paolo Bonzini, 2023/09/07
- [PULL 26/51] configure: move --enable-debug-tcg to meson, Paolo Bonzini, 2023/09/07
- [PULL 23/51] configure: create native file with contents of $host_cc, Paolo Bonzini, 2023/09/07
- [PULL 27/51] contrib/plugins: use an independent makefile, Paolo Bonzini, 2023/09/07
- [PULL 30/51] configure, meson: remove CONFIG_SOLARIS from config-host.mak, Paolo Bonzini, 2023/09/07
- [PULL 32/51] meson: list leftover CONFIG_* symbols, Paolo Bonzini, 2023/09/07
- [PULL 29/51] configure, meson: move --enable-plugins to meson, Paolo Bonzini, 2023/09/07
- [PULL 31/51] configure, meson: remove target OS symbols from config-host.mak, Paolo Bonzini, 2023/09/07
- [PULL 35/51] mkvenv: assume presence of importlib.metadata, Paolo Bonzini, 2023/09/07
- [PULL 34/51] Python: Drop support for Python 3.7,
Paolo Bonzini <=
- [PULL 33/51] configure: remove dead code, Paolo Bonzini, 2023/09/07
- [PULL 39/51] hw/i386/fw_cfg: Include missing 'cpu.h' header, Paolo Bonzini, 2023/09/07
- [PULL 38/51] hw/i386/pc: Include missing 'cpu.h' header, Paolo Bonzini, 2023/09/07
- [PULL 28/51] configure: unify recursion into sub-Makefiles, Paolo Bonzini, 2023/09/07
- [PULL 36/51] Revert "mkvenv: work around broken pip installations on Debian 10", Paolo Bonzini, 2023/09/07
- [PULL 37/51] hw/i386/pc: Include missing 'sysemu/tcg.h' header, Paolo Bonzini, 2023/09/07
- [PULL 41/51] target/i386/cpu-sysemu: Inline kvm_apic_in_kernel(), Paolo Bonzini, 2023/09/07
- [PULL 40/51] target/i386/helper: Restrict KVM declarations to system emulation, Paolo Bonzini, 2023/09/07
- [PULL 46/51] sysemu/kvm: Restrict kvm_arch_get_supported_cpuid/msr() to x86 targets, Paolo Bonzini, 2023/09/07
- [PULL 48/51] sysemu/kvm: Restrict kvm_has_pit_state2() to x86 targets, Paolo Bonzini, 2023/09/07