diff mbox series

[7/7] Python: Drop support for Python 3.6

Message ID 20230209154034.983044-8-jsnow@redhat.com
State New
Headers show
Series Python: Drop support for Python 3.6 | expand

Commit Message

John Snow Feb. 9, 2023, 3:40 p.m. UTC
Python 3.6 was EOL 2021-12-31. Newer versions of upstream libraries have
begun dropping support for this version and it is becoming more
cumbersome to support. Avocado-framework and qemu.qmp each have their
own reasons for wanting to drop Python 3.6.

Since it is safe to under our supported platform policy, do so.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 docs/conf.py             |  4 ++--
 configure                |  8 ++++----
 python/Makefile          | 10 +++++-----
 python/setup.cfg         |  7 +++----
 python/tests/minreqs.txt |  2 +-
 scripts/qapi/mypy.ini    |  2 +-
 6 files changed, 16 insertions(+), 17 deletions(-)

Comments

Daniel P. Berrangé Feb. 9, 2023, 4:27 p.m. UTC | #1
On Thu, Feb 09, 2023 at 10:40:34AM -0500, John Snow wrote:
> Python 3.6 was EOL 2021-12-31. Newer versions of upstream libraries have
> begun dropping support for this version and it is becoming more
> cumbersome to support. Avocado-framework and qemu.qmp each have their
> own reasons for wanting to drop Python 3.6.
>
> Since it is safe to under our supported platform policy, do so.

Upstream EOL dates are essentially irrelevant from our platform
support policy for deciding min versions

QEMU aims to target released OS distributions, and their vendors
may choose to support software for arbitrarily longer periods of
time than upstream. This extended support is one of the key
value adds of OS distributions.

To justify dropping python 3.6, the commit message needs to
illustrate that all our targetted distros are capable of
supporting the new proposed new min version. 

> 
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>  docs/conf.py             |  4 ++--
>  configure                |  8 ++++----
>  python/Makefile          | 10 +++++-----
>  python/setup.cfg         |  7 +++----
>  python/tests/minreqs.txt |  2 +-
>  scripts/qapi/mypy.ini    |  2 +-
>  6 files changed, 16 insertions(+), 17 deletions(-)


With regards,
Daniel
John Snow Feb. 9, 2023, 4:40 p.m. UTC | #2
On Thu, Feb 9, 2023 at 11:27 AM Daniel P. Berrangé <berrange@redhat.com> wrote:
>
> On Thu, Feb 09, 2023 at 10:40:34AM -0500, John Snow wrote:
> > Python 3.6 was EOL 2021-12-31. Newer versions of upstream libraries have
> > begun dropping support for this version and it is becoming more
> > cumbersome to support. Avocado-framework and qemu.qmp each have their
> > own reasons for wanting to drop Python 3.6.
> >
> > Since it is safe to under our supported platform policy, do so.
>
> Upstream EOL dates are essentially irrelevant from our platform
> support policy for deciding min versions
>

It's relevant because as other Python packages drop support, the
burden of support is pushed onto Cleber and I, as explained in the
cover letter. It is not a justification in and of itself, but it
summarizes the ecosystem conditions that prompt the desire for the
change.

> QEMU aims to target released OS distributions, and their vendors
> may choose to support software for arbitrarily longer periods of
> time than upstream. This extended support is one of the key
> value adds of OS distributions.
>
> To justify dropping python 3.6, the commit message needs to
> illustrate that all our targetted distros are capable of
> supporting the new proposed new min version.

That is the point of this series: illustrating that it is indeed safe
to drop Python 3.6. I am not clear on what you are actually requesting
as a change.

> >
> > Signed-off-by: John Snow <jsnow@redhat.com>
> > ---
> >  docs/conf.py             |  4 ++--
> >  configure                |  8 ++++----
> >  python/Makefile          | 10 +++++-----
> >  python/setup.cfg         |  7 +++----
> >  python/tests/minreqs.txt |  2 +-
> >  scripts/qapi/mypy.ini    |  2 +-
> >  6 files changed, 16 insertions(+), 17 deletions(-)
>
>
> With regards,
> Daniel
> --
> |: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org         -o-            https://fstop138.berrange.com :|
> |: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|
>
Daniel P. Berrangé Feb. 9, 2023, 6:03 p.m. UTC | #3
On Thu, Feb 09, 2023 at 11:40:57AM -0500, John Snow wrote:
> On Thu, Feb 9, 2023 at 11:27 AM Daniel P. Berrangé <berrange@redhat.com> wrote:
> >
> > On Thu, Feb 09, 2023 at 10:40:34AM -0500, John Snow wrote:
> > > Python 3.6 was EOL 2021-12-31. Newer versions of upstream libraries have
> > > begun dropping support for this version and it is becoming more
> > > cumbersome to support. Avocado-framework and qemu.qmp each have their
> > > own reasons for wanting to drop Python 3.6.
> > >
> > > Since it is safe to under our supported platform policy, do so.
> >
> > Upstream EOL dates are essentially irrelevant from our platform
> > support policy for deciding min versions
> >
> 
> It's relevant because as other Python packages drop support, the
> burden of support is pushed onto Cleber and I, as explained in the
> cover letter. It is not a justification in and of itself, but it
> summarizes the ecosystem conditions that prompt the desire for the
> change.
> > QEMU aims to target released OS distributions, and their vendors
> > may choose to support software for arbitrarily longer periods of
> > time than upstream. This extended support is one of the key
> > value adds of OS distributions.
> >
> > To justify dropping python 3.6, the commit message needs to
> > illustrate that all our targetted distros are capable of
> > supporting the new proposed new min version.
> 
> That is the point of this series: illustrating that it is indeed safe
> to drop Python 3.6. I am not clear on what you are actually requesting
> as a change.

Essentially it should explain what versions are available in each
distro. See for example commit 5890258aeeba303704ec1adca415e46067800777.



With regards,
Daniel
John Snow Feb. 9, 2023, 9:15 p.m. UTC | #4
On Thu, Feb 9, 2023 at 1:03 PM Daniel P. Berrangé <berrange@redhat.com> wrote:
>
> On Thu, Feb 09, 2023 at 11:40:57AM -0500, John Snow wrote:
> > On Thu, Feb 9, 2023 at 11:27 AM Daniel P. Berrangé <berrange@redhat.com> wrote:
> > >
> > > On Thu, Feb 09, 2023 at 10:40:34AM -0500, John Snow wrote:
> > > > Python 3.6 was EOL 2021-12-31. Newer versions of upstream libraries have
> > > > begun dropping support for this version and it is becoming more
> > > > cumbersome to support. Avocado-framework and qemu.qmp each have their
> > > > own reasons for wanting to drop Python 3.6.
> > > >
> > > > Since it is safe to under our supported platform policy, do so.
> > >
> > > Upstream EOL dates are essentially irrelevant from our platform
> > > support policy for deciding min versions
> > >
> >
> > It's relevant because as other Python packages drop support, the
> > burden of support is pushed onto Cleber and I, as explained in the
> > cover letter. It is not a justification in and of itself, but it
> > summarizes the ecosystem conditions that prompt the desire for the
> > change.
> > > QEMU aims to target released OS distributions, and their vendors
> > > may choose to support software for arbitrarily longer periods of
> > > time than upstream. This extended support is one of the key
> > > value adds of OS distributions.
> > >
> > > To justify dropping python 3.6, the commit message needs to
> > > illustrate that all our targetted distros are capable of
> > > supporting the new proposed new min version.
> >
> > That is the point of this series: illustrating that it is indeed safe
> > to drop Python 3.6. I am not clear on what you are actually requesting
> > as a change.
>
> Essentially it should explain what versions are available in each
> distro. See for example commit 5890258aeeba303704ec1adca415e46067800777.

Ah, OK.

Fedora 36: 3.10.5
Ubuntu 20.04: 3.8.10
Debian 11: 3.9.2
OpenSUSE Leap 15.4 uses 3.6.15, but 3.9 and 3.10 are available with a
simple zypper invocation.
CentOS Stream 8 uses 3.6.8, but 3.8 and 3.9 are available.
CentOS Stream 9 uses 3.9.13.
Alpine: Not sure, but tests pass.
FreeBSD 12: 3.7 (tests/vm/freebsd already uses this version.)
OpenBSD: ?
NetBSD: ?

I can update the commit message, but I do have questions for you in
patch 5 concerning the docker configurations and our test matrix that
I want to work out before a respin.

>
>
>
> With regards,
> Daniel
> --
> |: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
> |: https://libvirt.org         -o-            https://fstop138.berrange.com :|
> |: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|
>
diff mbox series

Patch

diff --git a/docs/conf.py b/docs/conf.py
index 73a287a4f27..d40448f35d9 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -37,9 +37,9 @@ 
 # In newer versions of Sphinx this will display nicely; in older versions
 # Sphinx will also produce a Python backtrace but at least the information
 # gets printed...
-if sys.version_info < (3,6):
+if sys.version_info < (3,7):
     raise ConfigError(
-        "QEMU requires a Sphinx that uses Python 3.6 or better\n")
+        "QEMU requires a Sphinx that uses Python 3.7 or better\n")
 
 # The per-manual conf.py will set qemu_docdir for a single-manual build;
 # otherwise set it here if this is an entire-manual-set build.
diff --git a/configure b/configure
index bf512273f44..de27994ddc8 100755
--- a/configure
+++ b/configure
@@ -594,9 +594,9 @@  esac
 
 
 check_py_version() {
-    # We require python >= 3.6.
+    # We require python >= 3.7.
     # NB: a True python conditional creates a non-zero return code (Failure)
-    "$1" -c 'import sys; sys.exit(sys.version_info < (3,6))'
+    "$1" -c 'import sys; sys.exit(sys.version_info < (3,7))'
 }
 
 python=
@@ -604,7 +604,7 @@  first_python=
 explicit_python=no
 # 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 "${PYTHON-python3}" python python3.{11..6}
+for binary in "${PYTHON-python3}" python python3.{11..7}
 do
     if has "$binary"
     then
@@ -1057,7 +1057,7 @@  then
 fi
 
 if ! check_py_version "$python"; then
-  error_exit "Cannot use '$python', Python >= 3.6 is required." \
+  error_exit "Cannot use '$python', Python >= 3.7 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 c5bd6ff83ac..f660d999143 100644
--- a/python/Makefile
+++ b/python/Makefile
@@ -9,14 +9,14 @@  help:
 	@echo "make check-minreqs:"
 	@echo "    Run tests in the minreqs virtual environment."
 	@echo "    These tests use the oldest dependencies."
-	@echo "    Requires: Python 3.6"
-	@echo "    Hint (Fedora): 'sudo dnf install python3.6'"
+	@echo "    Requires: Python 3.7"
+	@echo "    Hint (Fedora): 'sudo dnf install python3.7'"
 	@echo ""
 	@echo "make check-tox:"
 	@echo "    Run tests against multiple python versions."
 	@echo "    These tests use the newest dependencies."
-	@echo "    Requires: Python 3.6 - 3.10, and tox."
-	@echo "    Hint (Fedora): 'sudo dnf install python3-tox python3.10'"
+	@echo "    Requires: Python 3.7 - 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".
 	@echo ""
@@ -58,7 +58,7 @@  pipenv check-pipenv:
 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.6 -m venv $(QEMU_MINVENV_DIR)
+	@python3.7 -m venv $(QEMU_MINVENV_DIR)
 	@(								\
 		echo "ACTIVATE $(QEMU_MINVENV_DIR)";			\
 		. $(QEMU_MINVENV_DIR)/bin/activate;			\
diff --git a/python/setup.cfg b/python/setup.cfg
index 9e923d97628..1e8392a045c 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.6
     Programming Language :: Python :: 3.7
     Programming Language :: Python :: 3.8
     Programming Language :: Python :: 3.9
@@ -23,7 +22,7 @@  classifiers =
     Typing :: Typed
 
 [options]
-python_requires = >= 3.6
+python_requires = >= 3.7
 packages =
     qemu.qmp
     qemu.machine
@@ -76,7 +75,7 @@  exclude = __pycache__,
 
 [mypy]
 strict = True
-python_version = 3.6
+python_version = 3.7
 warn_unused_configs = True
 namespace_packages = True
 warn_unused_ignores = False
@@ -158,7 +157,7 @@  multi_line_output=3
 # of python available on your system to run this test.
 
 [tox:tox]
-envlist = py36, py37, py38, py39, py310, py311
+envlist = py37, py38, py39, py310, py311
 skip_missing_interpreters = true
 
 [testenv]
diff --git a/python/tests/minreqs.txt b/python/tests/minreqs.txt
index dfb8abb155f..55cc6b41d85 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.6***. It is used primarily
+# "make check" successfully under ***Python 3.7***. 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 66253564297..3463307ddc7 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.6
+python_version = 3.7
 
 [mypy-qapi.schema]
 disallow_untyped_defs = False