* [PATCH v2 0/4] perf build: Fix pylint build failures
@ 2026-09-30 13:11 Leo Yan
2026-09-30 13:11 ` [PATCH v2 1/4] perf build: Build the Python extension before pylint consumers Leo Yan
` (4 more replies)
0 siblings, 5 replies; 15+ messages in thread
From: Leo Yan @ 2026-09-30 13:11 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers,
Adrian Hunter, James Clark, Aishwarya TCV
Cc: linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo, Leo Yan
Recent changes to perf's Python module, including enabling pylint by
default, exposed build failures in our CI. For example:
tests/shell/lib/perf_brstack_max.py:8:0: E0401: Unable to import 'perf' (import-error)
This series builds the perf Python extension before running pylint on
its consumers without delaying C builds. It also prepends the output
Python directory to PYTHONPATH for out-of-tree builds.
The series also mutes the optparse deprecation warning from older pylint
versions. Python has reversed this deprecation, and newer pylint
versions no longer report it.
A final patch renames an exception variable in the PostgreSQL exporter
to fix pylint warning.
Tested on an x86 Intel Xeon(R) w7-3465X (28 cores, 56 threads), the
average real build time over three runs was 20.104s for v1 and 18.998s
for v2, about 1.1s (5.5%) faster.
Signed-off-by: Leo Yan <leo.yan@arm.com>
---
Changes in v2:
- Run pylint after the Python extension without delaying C builds
(Sashiko).
- Fix the PostgreSQL warning.
- Link to v1: https://lore.kernel.org/r/20260930-perf_fix_pylint_errors-v1-0-f72151d8b255@arm.com
---
Leo Yan (4):
perf build: Build the Python extension before pylint consumers
perf build: Add the output Python directory to pylint's PYTHONPATH
perf test: Suppress optparse deprecation warning with older pylint
perf python: Avoid shadowing exception name in PostgreSQL exporter
tools/perf/Build | 4 +++-
tools/perf/Makefile.perf | 17 ++++++++++++++++-
tools/perf/python/export-to-postgresql.py | 4 ++--
tools/perf/tests/Build | 4 +++-
tools/perf/tests/shell/lib/attr.py | 3 ++-
5 files changed, 26 insertions(+), 6 deletions(-)
---
base-commit: 45d15e89a783a0a279b7a54f9018c230127380d7
change-id: 20260930-perf_fix_pylint_errors-3cef583b1e47
Best regards,
--
Leo Yan <leo.yan@arm.com>
^ permalink raw reply [flat|nested] 15+ messages in thread* [PATCH v2 1/4] perf build: Build the Python extension before pylint consumers 2026-09-30 13:11 [PATCH v2 0/4] perf build: Fix pylint build failures Leo Yan @ 2026-09-30 13:11 ` Leo Yan 2026-09-30 13:19 ` sashiko-bot 2026-09-30 17:44 ` Ian Rogers 2026-09-30 13:11 ` [PATCH v2 2/4] perf build: Add the output Python directory to pylint's PYTHONPATH Leo Yan ` (3 subsequent siblings) 4 siblings, 2 replies; 15+ messages in thread From: Leo Yan @ 2026-09-30 13:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter, James Clark, Aishwarya TCV Cc: linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo, Leo Yan Pylint checks for tests and standalone Python scripts can run before the perf Python extension is available. On a clean parallel build, an import error can stop make before the extension is built. Run the script and test pylint checks in separate sub-makes after the language bindings are built. Keep their rules in the respective Build files so the perf and perf-test C sub-makes can compile concurrently with util and the Python extension. An isolated make perf does not need to build the extension just for these checks. Fixes: 8a54784e708b ("perf build: Add pylint build tests") Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com> Assisted-by: Codex:gpt-6 Signed-off-by: Leo Yan <leo.yan@arm.com> --- tools/perf/Build | 4 +++- tools/perf/Makefile.perf | 15 +++++++++++++++ tools/perf/tests/Build | 4 +++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/tools/perf/Build b/tools/perf/Build index 8a0b5592a973384deafc5bb5cc7ed0cc91e0257e..09fd88f5aca54118a9b089e9c20124e23de77517 100644 --- a/tools/perf/Build +++ b/tools/perf/Build @@ -102,4 +102,6 @@ $(OUTPUT)%.pylint_log: % $(call rule_mkdir) $(Q)$(call echo-cmd,test)$(PYLINT) "$<" > $@ || (cat $@ && rm $@ && false) -perf-y += $(PYLINT_TEST_LOGS) +.PHONY: pylint +pylint: $(addprefix $(OUTPUT),$(PYLINT_TEST_LOGS)) + @: diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 0102c3468a0b79fb22966d8cbd8fa8525d2ff3ae..0eb4e7c29c400021907d3da716bc4871f0df8d88 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -578,6 +578,7 @@ strip: $(PROGRAMS) $(OUTPUT)perf $(STRIP) $(STRIP_OPTS) $(PROGRAMS) $(OUTPUT)perf PERF_IN := $(OUTPUT)perf-in.o + export NO_JEVENTS build := -f $(srctree)/tools/build/Makefile.build dir=. obj @@ -633,6 +634,20 @@ $(SCRIPTS) : $(OUTPUT)% : %.sh $(OUTPUT)PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE $(Q)$(SHELL_PATH) util/PERF-VERSION-GEN $(OUTPUT) +ifdef PYLINT +# Run Python checks after the extension is ready, independently of C builds. +all: pylint-perf pylint-tests +.PHONY: pylint-perf pylint-tests + +pylint-perf pylint-tests: | $(LANG_BINDINGS) + +pylint-perf: + $(Q)$(MAKE) $(build)=perf pylint + +pylint-tests: + $(Q)$(MAKE) $(build)=perf-test dir=tests pylint +endif + # These can record PERF_VERSION perf.spec $(SCRIPTS) \ : $(OUTPUT)PERF-VERSION-FILE diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build index 8fecd539012429c0f517d95f145a91137333322b..05c545aac73232a322652a6119c3178f39b83145 100644 --- a/tools/perf/tests/Build +++ b/tools/perf/tests/Build @@ -119,4 +119,6 @@ $(OUTPUT)%.pylint_log: % $(call rule_mkdir) $(Q)$(call echo-cmd,test)$(PYLINT) "$<" > $@ || (cat $@ && rm $@ && false) -perf-test-y += $(PYLINT_TEST_LOGS) +.PHONY: pylint +pylint: $(addprefix $(OUTPUT)tests/,$(PYLINT_TEST_LOGS)) + @: -- 2.34.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/4] perf build: Build the Python extension before pylint consumers 2026-09-30 13:11 ` [PATCH v2 1/4] perf build: Build the Python extension before pylint consumers Leo Yan @ 2026-09-30 13:19 ` sashiko-bot 2026-09-30 17:44 ` Ian Rogers 1 sibling, 0 replies; 15+ messages in thread From: sashiko-bot @ 2026-09-30 13:19 UTC (permalink / raw) To: Leo Yan; +Cc: linux-perf-users > Pylint checks for tests and standalone Python scripts can run before the > perf Python extension is available. On a clean parallel build, an import > error can stop make before the extension is built. > > Run the script and test pylint checks in separate sub-makes after the > language bindings are built. Keep their rules in the respective Build > files so the perf and perf-test C sub-makes can compile concurrently with > util and the Python extension. An isolated make perf does not need to > build the extension just for these checks. > > Fixes: 8a54784e708b ("perf build: Add pylint build tests") > Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com> > Assisted-by: Codex:gpt-6 > Signed-off-by: Leo Yan <leo.yan@arm.com> Sashiko has reviewed this patch and found no issues. It looks great! -- Sashiko AI review · https://sashiko.dev/#/patchset/20260930-perf_fix_pylint_errors-v2-0-945cd526576b@arm.com?part=1 ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 1/4] perf build: Build the Python extension before pylint consumers 2026-09-30 13:11 ` [PATCH v2 1/4] perf build: Build the Python extension before pylint consumers Leo Yan 2026-09-30 13:19 ` sashiko-bot @ 2026-09-30 17:44 ` Ian Rogers 1 sibling, 0 replies; 15+ messages in thread From: Ian Rogers @ 2026-09-30 17:44 UTC (permalink / raw) To: Leo Yan Cc: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Adrian Hunter, James Clark, Aishwarya TCV, linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo On Wed, Sep 30, 2026 at 6:11 AM Leo Yan <leo.yan@arm.com> wrote: > > Pylint checks for tests and standalone Python scripts can run before the > perf Python extension is available. On a clean parallel build, an import > error can stop make before the extension is built. > > Run the script and test pylint checks in separate sub-makes after the > language bindings are built. Keep their rules in the respective Build > files so the perf and perf-test C sub-makes can compile concurrently with > util and the Python extension. An isolated make perf does not need to > build the extension just for these checks. > > Fixes: 8a54784e708b ("perf build: Add pylint build tests") > Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com> > Assisted-by: Codex:gpt-6 > Signed-off-by: Leo Yan <leo.yan@arm.com> Reviewed-by: Ian Rogers <irogers@google.com> Thanks Leo! Should we do the same thing for mypy and shellcheck? This should help overall build performance. Ian > --- > tools/perf/Build | 4 +++- > tools/perf/Makefile.perf | 15 +++++++++++++++ > tools/perf/tests/Build | 4 +++- > 3 files changed, 21 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/Build b/tools/perf/Build > index 8a0b5592a973384deafc5bb5cc7ed0cc91e0257e..09fd88f5aca54118a9b089e9c20124e23de77517 100644 > --- a/tools/perf/Build > +++ b/tools/perf/Build > @@ -102,4 +102,6 @@ $(OUTPUT)%.pylint_log: % > $(call rule_mkdir) > $(Q)$(call echo-cmd,test)$(PYLINT) "$<" > $@ || (cat $@ && rm $@ && false) > > -perf-y += $(PYLINT_TEST_LOGS) > +.PHONY: pylint > +pylint: $(addprefix $(OUTPUT),$(PYLINT_TEST_LOGS)) > + @: > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > index 0102c3468a0b79fb22966d8cbd8fa8525d2ff3ae..0eb4e7c29c400021907d3da716bc4871f0df8d88 100644 > --- a/tools/perf/Makefile.perf > +++ b/tools/perf/Makefile.perf > @@ -578,6 +578,7 @@ strip: $(PROGRAMS) $(OUTPUT)perf > $(STRIP) $(STRIP_OPTS) $(PROGRAMS) $(OUTPUT)perf > > PERF_IN := $(OUTPUT)perf-in.o > + > export NO_JEVENTS > > build := -f $(srctree)/tools/build/Makefile.build dir=. obj > @@ -633,6 +634,20 @@ $(SCRIPTS) : $(OUTPUT)% : %.sh > $(OUTPUT)PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE > $(Q)$(SHELL_PATH) util/PERF-VERSION-GEN $(OUTPUT) > > +ifdef PYLINT > +# Run Python checks after the extension is ready, independently of C builds. > +all: pylint-perf pylint-tests > +.PHONY: pylint-perf pylint-tests > + > +pylint-perf pylint-tests: | $(LANG_BINDINGS) > + > +pylint-perf: > + $(Q)$(MAKE) $(build)=perf pylint > + > +pylint-tests: > + $(Q)$(MAKE) $(build)=perf-test dir=tests pylint > +endif > + > # These can record PERF_VERSION > perf.spec $(SCRIPTS) \ > : $(OUTPUT)PERF-VERSION-FILE > diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build > index 8fecd539012429c0f517d95f145a91137333322b..05c545aac73232a322652a6119c3178f39b83145 100644 > --- a/tools/perf/tests/Build > +++ b/tools/perf/tests/Build > @@ -119,4 +119,6 @@ $(OUTPUT)%.pylint_log: % > $(call rule_mkdir) > $(Q)$(call echo-cmd,test)$(PYLINT) "$<" > $@ || (cat $@ && rm $@ && false) > > -perf-test-y += $(PYLINT_TEST_LOGS) > +.PHONY: pylint > +pylint: $(addprefix $(OUTPUT)tests/,$(PYLINT_TEST_LOGS)) > + @: > > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 2/4] perf build: Add the output Python directory to pylint's PYTHONPATH 2026-09-30 13:11 [PATCH v2 0/4] perf build: Fix pylint build failures Leo Yan 2026-09-30 13:11 ` [PATCH v2 1/4] perf build: Build the Python extension before pylint consumers Leo Yan @ 2026-09-30 13:11 ` Leo Yan 2026-09-30 13:18 ` sashiko-bot 2026-09-30 17:45 ` Ian Rogers 2026-09-30 13:11 ` [PATCH v2 3/4] perf test: Suppress optparse deprecation warning with older pylint Leo Yan ` (2 subsequent siblings) 4 siblings, 2 replies; 15+ messages in thread From: Leo Yan @ 2026-09-30 13:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter, James Clark, Aishwarya TCV Cc: linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo, Leo Yan Prepend the output Python directory to pylint's PYTHONPATH so builds using O= can also find the generated extension. Fixes: 5fe83fb352c8 ("perf build: Make pylint build test opt-out (NO_PYLINT=1)") Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com> Assisted-by: Codex:gpt-6 Signed-off-by: Leo Yan <leo.yan@arm.com> --- tools/perf/Makefile.perf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 0eb4e7c29c400021907d3da716bc4871f0df8d88..7ceefc1da774625d9f48d3bb0498ceb819b84d26 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -310,7 +310,7 @@ ifneq ($(force_fixdep),1) $(warning Warning: pylint version is older than 2.16.0, skipping pylint checks.) override PYLINT := else - override PYLINT := PYTHONPATH=$(srctree)/tools/perf/python:$(srctree)/tools/perf/pmu-events \ + override PYLINT := PYTHONPATH=$(abspath $(OUTPUT)python):$(srctree)/tools/perf/python:$(srctree)/tools/perf/pmu-events \ $(PYLINT) --disable=all --enable=E,W --disable=W0123,W0311,W0511,W0603,W0622,W0718 \ --ignored-modules=textual,setproctitle endif -- 2.34.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] perf build: Add the output Python directory to pylint's PYTHONPATH 2026-09-30 13:11 ` [PATCH v2 2/4] perf build: Add the output Python directory to pylint's PYTHONPATH Leo Yan @ 2026-09-30 13:18 ` sashiko-bot 2026-09-30 17:45 ` Ian Rogers 1 sibling, 0 replies; 15+ messages in thread From: sashiko-bot @ 2026-09-30 13:18 UTC (permalink / raw) To: Leo Yan; +Cc: linux-perf-users > Prepend the output Python directory to pylint's PYTHONPATH so builds > using O= can also find the generated extension. > > Fixes: 5fe83fb352c8 ("perf build: Make pylint build test opt-out (NO_PYLINT=1)") > Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com> > Assisted-by: Codex:gpt-6 > Signed-off-by: Leo Yan <leo.yan@arm.com> Sashiko has reviewed this patch and found no issues. It looks great! -- Sashiko AI review · https://sashiko.dev/#/patchset/20260930-perf_fix_pylint_errors-v2-0-945cd526576b@arm.com?part=2 ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] perf build: Add the output Python directory to pylint's PYTHONPATH 2026-09-30 13:11 ` [PATCH v2 2/4] perf build: Add the output Python directory to pylint's PYTHONPATH Leo Yan 2026-09-30 13:18 ` sashiko-bot @ 2026-09-30 17:45 ` Ian Rogers 1 sibling, 0 replies; 15+ messages in thread From: Ian Rogers @ 2026-09-30 17:45 UTC (permalink / raw) To: Leo Yan Cc: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Adrian Hunter, James Clark, Aishwarya TCV, linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo On Wed, Sep 30, 2026 at 6:11 AM Leo Yan <leo.yan@arm.com> wrote: > > Prepend the output Python directory to pylint's PYTHONPATH so builds > using O= can also find the generated extension. > > Fixes: 5fe83fb352c8 ("perf build: Make pylint build test opt-out (NO_PYLINT=1)") > Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com> > Assisted-by: Codex:gpt-6 > Signed-off-by: Leo Yan <leo.yan@arm.com> Reviewed-by: Ian Rogers <irogers@google.com> Thanks! Ian > --- > tools/perf/Makefile.perf | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf > index 0eb4e7c29c400021907d3da716bc4871f0df8d88..7ceefc1da774625d9f48d3bb0498ceb819b84d26 100644 > --- a/tools/perf/Makefile.perf > +++ b/tools/perf/Makefile.perf > @@ -310,7 +310,7 @@ ifneq ($(force_fixdep),1) > $(warning Warning: pylint version is older than 2.16.0, skipping pylint checks.) > override PYLINT := > else > - override PYLINT := PYTHONPATH=$(srctree)/tools/perf/python:$(srctree)/tools/perf/pmu-events \ > + override PYLINT := PYTHONPATH=$(abspath $(OUTPUT)python):$(srctree)/tools/perf/python:$(srctree)/tools/perf/pmu-events \ > $(PYLINT) --disable=all --enable=E,W --disable=W0123,W0311,W0511,W0603,W0622,W0718 \ > --ignored-modules=textual,setproctitle > endif > > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 3/4] perf test: Suppress optparse deprecation warning with older pylint 2026-09-30 13:11 [PATCH v2 0/4] perf build: Fix pylint build failures Leo Yan 2026-09-30 13:11 ` [PATCH v2 1/4] perf build: Build the Python extension before pylint consumers Leo Yan 2026-09-30 13:11 ` [PATCH v2 2/4] perf build: Add the output Python directory to pylint's PYTHONPATH Leo Yan @ 2026-09-30 13:11 ` Leo Yan 2026-09-30 13:13 ` sashiko-bot 2026-09-30 17:39 ` Ian Rogers 2026-09-30 13:11 ` [PATCH v2 4/4] perf python: Avoid shadowing exception name in PostgreSQL exporter Leo Yan 2026-09-30 17:52 ` [PATCH v2 0/4] perf build: Fix pylint build failures Arnaldo Carvalho de Melo 4 siblings, 2 replies; 15+ messages in thread From: Leo Yan @ 2026-09-30 13:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter, James Clark, Aishwarya TCV Cc: linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo, Leo Yan Python 3.13 reversed optparse's deprecation, and pylint 3.3.5 removed it from the deprecated-module list. Perf supports older pylint versions, so suppress the warning on this import and document the reason. Keep other deprecated-module diagnostics enabled. Link: https://docs.python.org/3.13/whatsnew/3.13.html#optparse Link: https://pylint.readthedocs.io/en/latest/whatsnew/3/3.3/index.html#what-s-new-in-pylint-3-3-5 Fixes: 8a54784e708b ("perf build: Add pylint build tests") Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com> Assisted-by: Codex:gpt-6 Signed-off-by: Leo Yan <leo.yan@arm.com> --- tools/perf/tests/shell/lib/attr.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/perf/tests/shell/lib/attr.py b/tools/perf/tests/shell/lib/attr.py index 7f3d5b64b00dd7de45baff4f7d9baff89e003147..523257bcf8e126cb662af589727144bb26cff4d5 100644 --- a/tools/perf/tests/shell/lib/attr.py +++ b/tools/perf/tests/shell/lib/attr.py @@ -4,7 +4,8 @@ import configparser import os import sys import glob -import optparse +# Pylint before 3.3.5 still treats optparse as deprecated. +import optparse # pylint: disable=deprecated-module import platform import tempfile import logging -- 2.34.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/4] perf test: Suppress optparse deprecation warning with older pylint 2026-09-30 13:11 ` [PATCH v2 3/4] perf test: Suppress optparse deprecation warning with older pylint Leo Yan @ 2026-09-30 13:13 ` sashiko-bot 2026-09-30 17:39 ` Ian Rogers 1 sibling, 0 replies; 15+ messages in thread From: sashiko-bot @ 2026-09-30 13:13 UTC (permalink / raw) To: Leo Yan; +Cc: linux-perf-users > Python 3.13 reversed optparse's deprecation, and pylint 3.3.5 removed it > from the deprecated-module list. Perf supports older pylint versions, > so suppress the warning on this import and document the reason. Keep > other deprecated-module diagnostics enabled. > > Link: https://docs.python.org/3.13/whatsnew/3.13.html#optparse > Link: https://pylint.readthedocs.io/en/latest/whatsnew/3/3.3/index.html#what-s-new-in-pylint-3-3-5 > Fixes: 8a54784e708b ("perf build: Add pylint build tests") > Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com> > Assisted-by: Codex:gpt-6 > Signed-off-by: Leo Yan <leo.yan@arm.com> Sashiko has reviewed this patch and found no issues. It looks great! -- Sashiko AI review · https://sashiko.dev/#/patchset/20260930-perf_fix_pylint_errors-v2-0-945cd526576b@arm.com?part=3 ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/4] perf test: Suppress optparse deprecation warning with older pylint 2026-09-30 13:11 ` [PATCH v2 3/4] perf test: Suppress optparse deprecation warning with older pylint Leo Yan 2026-09-30 13:13 ` sashiko-bot @ 2026-09-30 17:39 ` Ian Rogers 2026-10-01 15:55 ` Leo Yan 1 sibling, 1 reply; 15+ messages in thread From: Ian Rogers @ 2026-09-30 17:39 UTC (permalink / raw) To: Leo Yan Cc: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Adrian Hunter, James Clark, Aishwarya TCV, linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo On Wed, Sep 30, 2026 at 6:11 AM Leo Yan <leo.yan@arm.com> wrote: > > Python 3.13 reversed optparse's deprecation, and pylint 3.3.5 removed it > from the deprecated-module list. Perf supports older pylint versions, > so suppress the warning on this import and document the reason. Keep > other deprecated-module diagnostics enabled. > > Link: https://docs.python.org/3.13/whatsnew/3.13.html#optparse > Link: https://pylint.readthedocs.io/en/latest/whatsnew/3/3.3/index.html#what-s-new-in-pylint-3-3-5 > Fixes: 8a54784e708b ("perf build: Add pylint build tests") > Reported-by: Aishwarya TCV <aishwarya.tcv@arm.com> > Assisted-by: Codex:gpt-6 > Signed-off-by: Leo Yan <leo.yan@arm.com> > --- > tools/perf/tests/shell/lib/attr.py | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/tools/perf/tests/shell/lib/attr.py b/tools/perf/tests/shell/lib/attr.py > index 7f3d5b64b00dd7de45baff4f7d9baff89e003147..523257bcf8e126cb662af589727144bb26cff4d5 100644 > --- a/tools/perf/tests/shell/lib/attr.py > +++ b/tools/perf/tests/shell/lib/attr.py > @@ -4,7 +4,8 @@ import configparser > import os > import sys > import glob > -import optparse > +# Pylint before 3.3.5 still treats optparse as deprecated. > +import optparse # pylint: disable=deprecated-module Thanks Leo! Could we just update to argparse here? ``` diff --git a/tools/perf/tests/shell/lib/attr.py b/tools/perf/tests/shell/lib/attr.py index 7f3d5b64b00d..68f06df9565a 100644 --- a/tools/perf/tests/shell/lib/attr.py +++ b/tools/perf/tests/shell/lib/attr.py @@ -4,7 +4,7 @@ import configparser import os import sys import glob -import optparse +import argparse import platform import tempfile import logging @@ -426,29 +426,20 @@ def setup_log(verbose): ch.setFormatter(formatter) log.addHandler(ch) -USAGE = '''%s [OPTIONS] - -d dir # tests dir - -p path # perf binary - -t test # single test - -v # verbose level -''' % sys.argv[0] - def main(): - parser = optparse.OptionParser(usage=USAGE) - - parser.add_option("-t", "--test", - action="store", type="string", dest="test") - parser.add_option("-d", "--test-dir", - action="store", type="string", dest="test_dir") - parser.add_option("-p", "--perf", - action="store", type="string", dest="perf") - parser.add_option("-v", "--verbose", - default=0, action="count", dest="verbose") - - options, args = parser.parse_args() - if args: - parser.error('FAILED wrong arguments %s' % ' '.join(args)) - return -1 + parser = argparse.ArgumentParser() + + parser.add_argument("-t", "--test", + action="store", dest="test", help="single test") + parser.add_argument("-d", "--test-dir", + action="store", dest="test_dir", help="tests dir") + parser.add_argument("-p", "--perf", + action="store", dest="perf", help="perf binary") + parser.add_argument("-v", "--verbose", + default=0, action="count", dest="verbose", + help="verbose level") + + options = parser.parse_args() setup_log(options.verbose) ``` Thanks, Ian > import platform > import tempfile > import logging > > -- > 2.34.1 > ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 3/4] perf test: Suppress optparse deprecation warning with older pylint 2026-09-30 17:39 ` Ian Rogers @ 2026-10-01 15:55 ` Leo Yan 0 siblings, 0 replies; 15+ messages in thread From: Leo Yan @ 2026-10-01 15:55 UTC (permalink / raw) To: Ian Rogers Cc: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Adrian Hunter, James Clark, Aishwarya TCV, linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo On Wed, Sep 30, 2026 at 10:39:36AM -0700, Ian Rogers wrote: [...] > > -import optparse > > +# Pylint before 3.3.5 still treats optparse as deprecated. > > +import optparse # pylint: disable=deprecated-module > > Thanks Leo! Could we just update to argparse here? Thanks for suggestion. Please see the new patch: https://lore.kernel.org/linux-perf-users/20261001-perf_replace_optparse_with_argparse-v1-1-268b604f8e55@arm.com/T/#u ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 4/4] perf python: Avoid shadowing exception name in PostgreSQL exporter 2026-09-30 13:11 [PATCH v2 0/4] perf build: Fix pylint build failures Leo Yan ` (2 preceding siblings ...) 2026-09-30 13:11 ` [PATCH v2 3/4] perf test: Suppress optparse deprecation warning with older pylint Leo Yan @ 2026-09-30 13:11 ` Leo Yan 2026-09-30 13:13 ` sashiko-bot 2026-09-30 17:46 ` Ian Rogers 2026-09-30 17:52 ` [PATCH v2 0/4] perf build: Fix pylint build failures Arnaldo Carvalho de Melo 4 siblings, 2 replies; 15+ messages in thread From: Leo Yan @ 2026-09-30 13:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter, James Clark, Aishwarya TCV Cc: linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo, Leo Yan During the perf build, pylint reports: ************* Module export-to-postgresql python/export-to-postgresql.py:319:8: W0621: Redefining name 'e' from outer scope (line 100) (redefined-outer-name) Rename 'e' to 'db_error' to clear the warning. Fixes: b1f968c9656a ("perf python: Port export-to-postgresql to perf module") Assisted-by: Codex:gpt-6 Signed-off-by: Leo Yan <leo.yan@arm.com> --- tools/perf/python/export-to-postgresql.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/python/export-to-postgresql.py b/tools/perf/python/export-to-postgresql.py index b6782129354ed3b1bd750af41e7a002c7134bf12..9cac64dee361214de3d1f9907c5e6849327c8ed7 100755 --- a/tools/perf/python/export-to-postgresql.py +++ b/tools/perf/python/export-to-postgresql.py @@ -316,9 +316,9 @@ class PostgresExporter: # SQL identifiers are double-quoted; escape embedded double quotes by doubling them. db_name = self.dbname.replace('"', '""') self.do_query(f'CREATE DATABASE "{db_name}"') - except Exception as e: + except Exception as db_error: shutil.rmtree(self.output_dir_name, ignore_errors=True) - raise e + raise db_error self.disconnect() self.connect(self.dbname) -- 2.34.1 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 4/4] perf python: Avoid shadowing exception name in PostgreSQL exporter 2026-09-30 13:11 ` [PATCH v2 4/4] perf python: Avoid shadowing exception name in PostgreSQL exporter Leo Yan @ 2026-09-30 13:13 ` sashiko-bot 2026-09-30 17:46 ` Ian Rogers 1 sibling, 0 replies; 15+ messages in thread From: sashiko-bot @ 2026-09-30 13:13 UTC (permalink / raw) To: Leo Yan; +Cc: linux-perf-users > During the perf build, pylint reports: > > ************* Module export-to-postgresql > python/export-to-postgresql.py:319:8: W0621: Redefining name 'e' from outer scope (line 100) (redefined-outer-name) > > Rename 'e' to 'db_error' to clear the warning. > > Fixes: b1f968c9656a ("perf python: Port export-to-postgresql to perf module") > Assisted-by: Codex:gpt-6 > Signed-off-by: Leo Yan <leo.yan@arm.com> Sashiko has reviewed this patch and found no issues. It looks great! -- Sashiko AI review · https://sashiko.dev/#/patchset/20260930-perf_fix_pylint_errors-v2-0-945cd526576b@arm.com?part=4 ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 4/4] perf python: Avoid shadowing exception name in PostgreSQL exporter 2026-09-30 13:11 ` [PATCH v2 4/4] perf python: Avoid shadowing exception name in PostgreSQL exporter Leo Yan 2026-09-30 13:13 ` sashiko-bot @ 2026-09-30 17:46 ` Ian Rogers 1 sibling, 0 replies; 15+ messages in thread From: Ian Rogers @ 2026-09-30 17:46 UTC (permalink / raw) To: Leo Yan Cc: Arnaldo Carvalho de Melo, Namhyung Kim, Jiri Olsa, Adrian Hunter, James Clark, Aishwarya TCV, linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo On Wed, Sep 30, 2026 at 6:11 AM Leo Yan <leo.yan@arm.com> wrote: > > During the perf build, pylint reports: > > ************* Module export-to-postgresql > python/export-to-postgresql.py:319:8: W0621: Redefining name 'e' from outer scope (line 100) (redefined-outer-name) > > Rename 'e' to 'db_error' to clear the warning. > > Fixes: b1f968c9656a ("perf python: Port export-to-postgresql to perf module") > Assisted-by: Codex:gpt-6 > Signed-off-by: Leo Yan <leo.yan@arm.com> Reviewed-by: Ian Rogers <irogers@google.com> Thanks! Ian > --- > tools/perf/python/export-to-postgresql.py | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/python/export-to-postgresql.py b/tools/perf/python/export-to-postgresql.py > index b6782129354ed3b1bd750af41e7a002c7134bf12..9cac64dee361214de3d1f9907c5e6849327c8ed7 100755 > --- a/tools/perf/python/export-to-postgresql.py > +++ b/tools/perf/python/export-to-postgresql.py > @@ -316,9 +316,9 @@ class PostgresExporter: > # SQL identifiers are double-quoted; escape embedded double quotes by doubling them. > db_name = self.dbname.replace('"', '""') > self.do_query(f'CREATE DATABASE "{db_name}"') > - except Exception as e: > + except Exception as db_error: > shutil.rmtree(self.output_dir_name, ignore_errors=True) > - raise e > + raise db_error > self.disconnect() > > self.connect(self.dbname) > > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 0/4] perf build: Fix pylint build failures 2026-09-30 13:11 [PATCH v2 0/4] perf build: Fix pylint build failures Leo Yan ` (3 preceding siblings ...) 2026-09-30 13:11 ` [PATCH v2 4/4] perf python: Avoid shadowing exception name in PostgreSQL exporter Leo Yan @ 2026-09-30 17:52 ` Arnaldo Carvalho de Melo 4 siblings, 0 replies; 15+ messages in thread From: Arnaldo Carvalho de Melo @ 2026-09-30 17:52 UTC (permalink / raw) To: Leo Yan Cc: Namhyung Kim, Jiri Olsa, Ian Rogers, Adrian Hunter, James Clark, Aishwarya TCV, linux-perf-users, linux-kernel, Arnaldo Carvalho de Melo On Wed, Sep 30, 2026 at 02:11:35PM +0100, Leo Yan wrote: > Recent changes to perf's Python module, including enabling pylint by > default, exposed build failures in our CI. For example: > > tests/shell/lib/perf_brstack_max.py:8:0: E0401: Unable to import 'perf' (import-error) > > This series builds the perf Python extension before running pylint on > its consumers without delaying C builds. It also prepends the output > Python directory to PYTHONPATH for out-of-tree builds. Thanks, applied patches 1-2 and 4, waiting for the suggestion from Ian to be considered for patch 3. - Arnaldo ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-10-01 15:55 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-09-30 13:11 [PATCH v2 0/4] perf build: Fix pylint build failures Leo Yan 2026-09-30 13:11 ` [PATCH v2 1/4] perf build: Build the Python extension before pylint consumers Leo Yan 2026-09-30 13:19 ` sashiko-bot 2026-09-30 17:44 ` Ian Rogers 2026-09-30 13:11 ` [PATCH v2 2/4] perf build: Add the output Python directory to pylint's PYTHONPATH Leo Yan 2026-09-30 13:18 ` sashiko-bot 2026-09-30 17:45 ` Ian Rogers 2026-09-30 13:11 ` [PATCH v2 3/4] perf test: Suppress optparse deprecation warning with older pylint Leo Yan 2026-09-30 13:13 ` sashiko-bot 2026-09-30 17:39 ` Ian Rogers 2026-10-01 15:55 ` Leo Yan 2026-09-30 13:11 ` [PATCH v2 4/4] perf python: Avoid shadowing exception name in PostgreSQL exporter Leo Yan 2026-09-30 13:13 ` sashiko-bot 2026-09-30 17:46 ` Ian Rogers 2026-09-30 17:52 ` [PATCH v2 0/4] perf build: Fix pylint build failures Arnaldo Carvalho de Melo
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.