[PATCH RFC 01/10] python/mkvenv: ensure HAVE_LIB variables are actually constants

John Snow posted 10 patches 2 weeks, 2 days ago
Maintainers: "Alex Bennée" <alex.bennee@linaro.org>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Thomas Huth <thuth@redhat.com>, John Snow <jsnow@redhat.com>, Cleber Rosa <crosa@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, Markus Armbruster <armbru@redhat.com>, Michael Roth <michael.roth@amd.com>, Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>
[PATCH RFC 01/10] python/mkvenv: ensure HAVE_LIB variables are actually constants
Posted by John Snow 2 weeks, 2 days ago
Pylint 4.x has refined checking for variable names that behave as
constants vs ones that do not; unfortunately our tricky import machinery
is perceived as these variables being re-assigned.

Add a temporary variable with an underscore and assign to the global
constants precisely once to alleviate this new nag message.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 python/scripts/mkvenv.py | 24 ++++++++++++++++--------
 python/setup.cfg         |  1 +
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/python/scripts/mkvenv.py b/python/scripts/mkvenv.py
index 9aed266df1b..a064709e6ce 100644
--- a/python/scripts/mkvenv.py
+++ b/python/scripts/mkvenv.py
@@ -92,7 +92,7 @@
 # Try to load distlib, with a fallback to pip's vendored version.
 # HAVE_DISTLIB is checked below, just-in-time, so that mkvenv does not fail
 # outside the venv or before a potential call to ensurepip in checkpip().
-HAVE_DISTLIB = True
+_import_ok = True
 try:
     import distlib.scripts
 except ImportError:
@@ -102,11 +102,13 @@
         from pip._vendor import distlib
         import pip._vendor.distlib.scripts  # noqa, pylint: disable=unused-import
     except ImportError:
-        HAVE_DISTLIB = False
+        _import_ok = False
+
+HAVE_DISTLIB = _import_ok
 
 # pip 25.2 does not vendor distlib.version, but it uses vendored
 # packaging.version
-HAVE_DISTLIB_VERSION = True
+_import_ok = True
 try:
     import distlib.version  # pylint: disable=ungrouped-imports
 except ImportError:
@@ -114,9 +116,11 @@
         # pylint: disable=unused-import,ungrouped-imports
         import pip._vendor.distlib.version  # noqa
     except ImportError:
-        HAVE_DISTLIB_VERSION = False
+        _import_ok = False
 
-HAVE_PACKAGING_VERSION = True
+HAVE_DISTLIB_VERSION = _import_ok
+
+_import_ok = True
 try:
     # Do not bother importing non-vendored packaging, because it is not
     # in stdlib.
@@ -125,20 +129,24 @@
     import pip._vendor.packaging.requirements  # noqa
     import pip._vendor.packaging.version  # noqa
 except ImportError:
-    HAVE_PACKAGING_VERSION = False
+    _import_ok = False
+
+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().
-HAVE_TOMLLIB = True
+_import_ok = True
 try:
     import tomllib
 except ImportError:
     try:
         import tomli as tomllib
     except ImportError:
-        HAVE_TOMLLIB = False
+        _import_ok = False
+
+HAVE_TOMLLIB = _import_ok
 
 # Do not add any mandatory dependencies from outside the stdlib:
 # This script *must* be usable standalone!
diff --git a/python/setup.cfg b/python/setup.cfg
index d7f5dc7bafe..f40f11396c9 100644
--- a/python/setup.cfg
+++ b/python/setup.cfg
@@ -159,6 +159,7 @@ good-names=i,
            c,   # for c in string: ...
            T,   # for TypeVars. See pylint#3401
            SocketAddrT,  # Not sure why this is invalid.
+           _import_ok,  # For mkvenv import trickery and compatibility pre-4.x
 
 [pylint.similarities]
 # Ignore imports when computing similarities.
-- 
2.51.0
Re: [PATCH RFC 01/10] python/mkvenv: ensure HAVE_LIB variables are actually constants
Posted by Thomas Huth 2 weeks, 1 day ago
On 28/10/2025 23.03, John Snow wrote:
> Pylint 4.x has refined checking for variable names that behave as
> constants vs ones that do not; unfortunately our tricky import machinery
> is perceived as these variables being re-assigned.
> 
> Add a temporary variable with an underscore and assign to the global
> constants precisely once to alleviate this new nag message.
> 
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>   python/scripts/mkvenv.py | 24 ++++++++++++++++--------
>   python/setup.cfg         |  1 +
>   2 files changed, 17 insertions(+), 8 deletions(-)

...> diff --git a/python/setup.cfg b/python/setup.cfg
> index d7f5dc7bafe..f40f11396c9 100644
> --- a/python/setup.cfg
> +++ b/python/setup.cfg
> @@ -159,6 +159,7 @@ good-names=i,
>              c,   # for c in string: ...
>              T,   # for TypeVars. See pylint#3401
>              SocketAddrT,  # Not sure why this is invalid.
> +           _import_ok,  # For mkvenv import trickery and compatibility pre-4.x

Out of curiosity, is it really necessary to add _import_ok to good-names, or 
is this just for being on the safe side for future changes in pylint?

Anyway,
Reviewed-by: Thomas Huth <thuth@redhat.com>
Re: [PATCH RFC 01/10] python/mkvenv: ensure HAVE_LIB variables are actually constants
Posted by John Snow 2 weeks, 1 day ago
On Thu, Oct 30, 2025, 3:51 AM Thomas Huth <thuth@redhat.com> wrote:

> On 28/10/2025 23.03, John Snow wrote:
> > Pylint 4.x has refined checking for variable names that behave as
> > constants vs ones that do not; unfortunately our tricky import machinery
> > is perceived as these variables being re-assigned.
> >
> > Add a temporary variable with an underscore and assign to the global
> > constants precisely once to alleviate this new nag message.
> >
> > Signed-off-by: John Snow <jsnow@redhat.com>
> > ---
> >   python/scripts/mkvenv.py | 24 ++++++++++++++++--------
> >   python/setup.cfg         |  1 +
> >   2 files changed, 17 insertions(+), 8 deletions(-)
>
> ...> diff --git a/python/setup.cfg b/python/setup.cfg
> > index d7f5dc7bafe..f40f11396c9 100644
> > --- a/python/setup.cfg
> > +++ b/python/setup.cfg
> > @@ -159,6 +159,7 @@ good-names=i,
> >              c,   # for c in string: ...
> >              T,   # for TypeVars. See pylint#3401
> >              SocketAddrT,  # Not sure why this is invalid.
> > +           _import_ok,  # For mkvenv import trickery and compatibility
> pre-4.x
>
> Out of curiosity, is it really necessary to add _import_ok to good-names,
> or
> is this just for being on the safe side for future changes in pylint?
>

It's for the older versions... they still think it's a constant and want it
uppercased.


> Anyway,
> Reviewed-by: Thomas Huth <thuth@redhat.com>
>
>