From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Li-Wen Hsu" <lwhsu@freebsd.org>,
"Alex Bennée" <alex.bennee@linaro.org>,
"John Snow" <jsnow@redhat.com>, "Peter Xu" <peterx@redhat.com>,
"Vladimir Sementsov-Ogievskiy" <vsementsov@yandex-team.ru>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Cleber Rosa" <crosa@redhat.com>,
"Mauro Carvalho Chehab" <mchehab+huawei@kernel.org>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Thomas Huth" <thuth@redhat.com>,
"Hanna Reitz" <hreitz@redhat.com>, "Warner Losh" <imp@bsdimp.com>,
qemu-block@nongnu.org, "Kevin Wolf" <kwolf@redhat.com>,
"Ed Maste" <emaste@freebsd.org>,
"Maksim Davydov" <davydov-max@yandex-team.ru>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Markus Armbruster" <armbru@redhat.com>,
"Kyle Evans" <kevans@freebsd.org>,
"Michael Roth" <michael.roth@amd.com>,
"Fabiano Rosas" <farosas@suse.de>,
"Yonggang Luo" <luoyonggang@gmail.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: [PULL 16/19] scripts: nudge users to use 'run' script for scripts that import qemu.qmp
Date: Mon, 23 Feb 2026 13:28:58 -0500 [thread overview]
Message-ID: <20260223182902.739189-17-jsnow@redhat.com> (raw)
In-Reply-To: <20260223182902.739189-1-jsnow@redhat.com>
Now that qmp has to be installed and isn't local, we can no longer offer
a simple forwarder for these scripts (nor path hacks) and hope that it
works. Encourage users to use the 'run' script to use these scripts
instead.
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-ID: <20260218213416.674483-18-jsnow@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
---
scripts/compare-machine-types.py | 7 ++-----
scripts/qmp/qemu-ga-client | 13 ++++++-------
scripts/qmp/qmp-shell | 13 ++++++-------
scripts/qmp/qmp-shell-wrap | 13 ++++++-------
scripts/qmp/qom-fuse | 13 ++++++-------
scripts/qmp/qom-get | 13 ++++++-------
scripts/qmp/qom-list | 13 ++++++-------
scripts/qmp/qom-set | 13 ++++++-------
scripts/qmp/qom-tree | 13 ++++++-------
scripts/qmp_helper.py | 9 ++-------
scripts/render_block_graph.py | 10 +++++++---
scripts/simplebench/bench_block_job.py | 10 +++++++---
tests/migration-stress/guestperf/engine.py | 15 ++++++++++++---
13 files changed, 78 insertions(+), 77 deletions(-)
diff --git a/scripts/compare-machine-types.py b/scripts/compare-machine-types.py
index b4f899082a7..83be361f4f6 100755
--- a/scripts/compare-machine-types.py
+++ b/scripts/compare-machine-types.py
@@ -27,19 +27,16 @@
# along with this program; if not, see <http://www.gnu.org/licenses/>.
import sys
-from os import path
from argparse import ArgumentParser, RawTextHelpFormatter, Namespace
import pandas as pd
from contextlib import ExitStack
from typing import Optional, List, Dict, Generator, Tuple, Union, Any, Set
try:
- qemu_dir = path.abspath(path.dirname(path.dirname(__file__)))
- sys.path.append(path.join(qemu_dir, 'python'))
from qemu.machine import QEMUMachine
except ModuleNotFoundError as exc:
- print(f"Module '{exc.name}' not found.")
- print("Try export PYTHONPATH=top-qemu-dir/python or run from top-qemu-dir")
+ print(f"Module '{exc.name}' not found.", file=sys.stderr)
+ print(f"Try $builddir/run {' '.join(sys.argv)}", file=sys.stderr)
sys.exit(1)
diff --git a/scripts/qmp/qemu-ga-client b/scripts/qmp/qemu-ga-client
index 56edd0234a6..7ea01b9a11d 100755
--- a/scripts/qmp/qemu-ga-client
+++ b/scripts/qmp/qemu-ga-client
@@ -1,11 +1,10 @@
#!/usr/bin/env python3
-import os
import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu.utils import qemu_ga_client
-
-
-if __name__ == '__main__':
- sys.exit(qemu_ga_client.main())
+print(
+ "This script has moved; after running configure,"
+ " please use '$builddir/run qemu-ga-client [...]' instead.",
+ file=sys.stderr
+)
+sys.exit(1)
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index 4a20f97db70..436c4940c26 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -1,11 +1,10 @@
#!/usr/bin/env python3
-import os
import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu.qmp import qmp_shell
-
-
-if __name__ == '__main__':
- qmp_shell.main()
+print(
+ "This script has moved; after running configure,"
+ " please use '$builddir/run qmp-shell [...]' instead.",
+ file=sys.stderr
+)
+sys.exit(1)
diff --git a/scripts/qmp/qmp-shell-wrap b/scripts/qmp/qmp-shell-wrap
index 9e94da114f5..f63dadad1ed 100755
--- a/scripts/qmp/qmp-shell-wrap
+++ b/scripts/qmp/qmp-shell-wrap
@@ -1,11 +1,10 @@
#!/usr/bin/env python3
-import os
import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu.qmp import qmp_shell
-
-
-if __name__ == '__main__':
- qmp_shell.main_wrap()
+print(
+ "This script has moved; after running configure,"
+ " please use '$builddir/run qmp-shell-wrap [...]' instead.",
+ file=sys.stderr
+)
+sys.exit(1)
diff --git a/scripts/qmp/qom-fuse b/scripts/qmp/qom-fuse
index d453807b273..7d4724a3710 100755
--- a/scripts/qmp/qom-fuse
+++ b/scripts/qmp/qom-fuse
@@ -1,11 +1,10 @@
#!/usr/bin/env python3
-import os
import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu.utils.qom_fuse import QOMFuse
-
-
-if __name__ == '__main__':
- sys.exit(QOMFuse.entry_point())
+print(
+ "This script has moved; after running configure,"
+ " please use '$builddir/run qom-fuse [...]' instead.",
+ file=sys.stderr
+)
+sys.exit(1)
diff --git a/scripts/qmp/qom-get b/scripts/qmp/qom-get
index 04ebe052e82..96363539624 100755
--- a/scripts/qmp/qom-get
+++ b/scripts/qmp/qom-get
@@ -1,11 +1,10 @@
#!/usr/bin/env python3
-import os
import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu.utils.qom import QOMGet
-
-
-if __name__ == '__main__':
- sys.exit(QOMGet.entry_point())
+print(
+ "This script has moved; after running configure,"
+ " please use '$builddir/run qom-get [...]' instead.",
+ file=sys.stderr
+)
+sys.exit(1)
diff --git a/scripts/qmp/qom-list b/scripts/qmp/qom-list
index 853b85a8d3f..e988274d1e7 100755
--- a/scripts/qmp/qom-list
+++ b/scripts/qmp/qom-list
@@ -1,11 +1,10 @@
#!/usr/bin/env python3
-import os
import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu.utils.qom import QOMList
-
-
-if __name__ == '__main__':
- sys.exit(QOMList.entry_point())
+print(
+ "This script has moved; after running configure,"
+ " please use '$builddir/run qom-list [...]' instead.",
+ file=sys.stderr
+)
+sys.exit(1)
diff --git a/scripts/qmp/qom-set b/scripts/qmp/qom-set
index 06820feec42..c2569afdcd7 100755
--- a/scripts/qmp/qom-set
+++ b/scripts/qmp/qom-set
@@ -1,11 +1,10 @@
#!/usr/bin/env python3
-import os
import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu.utils.qom import QOMSet
-
-
-if __name__ == '__main__':
- sys.exit(QOMSet.entry_point())
+print(
+ "This script has moved; after running configure,"
+ " please use '$builddir/run qom-set [...]' instead.",
+ file=sys.stderr
+)
+sys.exit(1)
diff --git a/scripts/qmp/qom-tree b/scripts/qmp/qom-tree
index 760e172277e..b3cd5ab6f82 100755
--- a/scripts/qmp/qom-tree
+++ b/scripts/qmp/qom-tree
@@ -1,11 +1,10 @@
#!/usr/bin/env python3
-import os
import sys
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu.utils.qom import QOMTree
-
-
-if __name__ == '__main__':
- sys.exit(QOMTree.entry_point())
+print(
+ "This script has moved; after running configure,"
+ " please use '$builddir/run qom-tree [...]' instead.",
+ file=sys.stderr
+)
+sys.exit(1)
diff --git a/scripts/qmp_helper.py b/scripts/qmp_helper.py
index c1e7e0fd80c..521612fb946 100755
--- a/scripts/qmp_helper.py
+++ b/scripts/qmp_helper.py
@@ -13,17 +13,12 @@
import sys
from datetime import datetime
-from os import path as os_path
try:
- qemu_dir = os_path.abspath(os_path.dirname(os_path.dirname(__file__)))
- sys.path.append(os_path.join(qemu_dir, 'python'))
-
from qemu.qmp.legacy import QEMUMonitorProtocol
-
except ModuleNotFoundError as exc:
- print(f"Module '{exc.name}' not found.")
- print("Try export PYTHONPATH=top-qemu-dir/python or run from top-qemu-dir")
+ print(f"Module '{exc.name}' not found.", file=sys.stderr)
+ print(f"Try $builddir/run {' '.join(sys.argv)}", file=sys.stderr)
sys.exit(1)
from base64 import b64encode
diff --git a/scripts/render_block_graph.py b/scripts/render_block_graph.py
index 3e1a2e3fa71..b9079bbed52 100755
--- a/scripts/render_block_graph.py
+++ b/scripts/render_block_graph.py
@@ -24,9 +24,13 @@
import json
from graphviz import Digraph
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'python'))
-from qemu.qmp import QMPError
-from qemu.qmp.legacy import QEMUMonitorProtocol
+try:
+ from qemu.qmp import QMPError
+ from qemu.qmp.legacy import QEMUMonitorProtocol
+except ModuleNotFoundError as exc:
+ print(f"Module '{exc.name}' not found.", file=sys.stderr)
+ print(f"Try $builddir/run {' '.join(sys.argv)}", file=sys.stderr)
+ sys.exit(1)
def perm(arr):
diff --git a/scripts/simplebench/bench_block_job.py b/scripts/simplebench/bench_block_job.py
index e575a3af10e..541a47e586d 100755
--- a/scripts/simplebench/bench_block_job.py
+++ b/scripts/simplebench/bench_block_job.py
@@ -25,9 +25,13 @@
import socket
import json
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
-from qemu.machine import QEMUMachine
-from qemu.qmp import ConnectError
+try:
+ from qemu.machine import QEMUMachine
+ from qemu.qmp import ConnectError
+except ModuleNotFoundError as exc:
+ print(f"Module '{exc.name}' not found.", file=sys.stderr)
+ print(f"Try $builddir/run {' '.join(sys.argv)}", file=sys.stderr)
+ sys.exit(1)
def bench_block_job(cmd, cmd_args, qemu_args):
diff --git a/tests/migration-stress/guestperf/engine.py b/tests/migration-stress/guestperf/engine.py
index d8462db7653..8d2ed757af3 100644
--- a/tests/migration-stress/guestperf/engine.py
+++ b/tests/migration-stress/guestperf/engine.py
@@ -27,9 +27,18 @@
from guestperf.report import Report, ReportResult
from guestperf.timings import TimingRecord, Timings
-sys.path.append(os.path.join(os.path.dirname(__file__),
- '..', '..', '..', 'python'))
-from qemu.machine import QEMUMachine
+try:
+ from qemu.machine import QEMUMachine
+except ModuleNotFoundError as exc:
+ print(
+ f"Module '{exc.name}' not found.\n"
+ "It should be installed as part of the configure-time "
+ "virtual environment in $builddir/pyvenv.\n"
+ "Try re-running this script as:\n"
+ f"> $builddir/run {' '.join(sys.argv)}",
+ file=sys.stderr
+ )
+ sys.exit(1)
# multifd supported compression algorithms
MULTIFD_CMP_ALGS = ("zlib", "zstd", "qpl", "uadk")
--
2.53.0
next prev parent reply other threads:[~2026-02-23 18:32 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-23 18:28 [PULL 00/19] Python patches John Snow
2026-02-23 18:28 ` [PULL 01/19] python/mkvenv: create timestamp file for each group "ensured" John Snow
2026-02-23 18:28 ` [PULL 02/19] python/mkvenv: bump 'qemu.qmp' dependency for testdeps John Snow
2026-02-23 18:28 ` [PULL 03/19] python/mkvenv: add 'tooling' and 'functests' dependency groups John Snow
2026-02-23 18:28 ` [PULL 04/19] python/mkvenv: add mechanism to install local package(s) John Snow
2026-02-23 18:28 ` [PULL 05/19] meson, mkvenv: add functests custom target John Snow
2026-02-23 18:28 ` [PULL 06/19] tests: Use configured python to run GitLab iotests John Snow
2026-02-23 18:28 ` [PULL 07/19] iotests: tolerate being run outside of pyvenv John Snow
2026-02-23 18:28 ` [PULL 08/19] tests: use "run" script to execute device-crash-test John Snow
2026-02-23 18:28 ` [PULL 09/19] tests/lcitool: update lcitool to latest version John Snow
2026-02-23 18:28 ` [PULL 10/19] tests/lcitool: add python3 wheel and setuptools deps for qemu John Snow
2026-02-23 18:28 ` [PULL 11/19] python: add vendored qemu.qmp package John Snow
2026-02-23 18:28 ` [PULL 12/19] meson, mkvenv: make functional tests depend on functests group John Snow
2026-02-23 18:28 ` [PULL 13/19] meson, mkvenv: add qemu.git/python/qemu package to pythondeps.toml John Snow
2026-02-23 18:28 ` [PULL 14/19] configure: unconditionally install "tooling" group John Snow
2026-02-23 18:28 ` [PULL 15/19] tests: replace check-venv with vm-venv target John Snow
2026-02-23 18:28 ` John Snow [this message]
2026-02-23 18:28 ` [PULL 17/19] python: delete qemu.qmp John Snow
2026-02-23 18:29 ` [PULL 18/19] python: update README.rst to reflect qemu.qmp's removal John Snow
2026-02-23 18:29 ` [PULL 19/19] python: add setuptools and wheel dependencies John Snow
2026-02-24 11:32 ` [PULL 00/19] Python patches Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260223182902.739189-17-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=crosa@redhat.com \
--cc=davydov-max@yandex-team.ru \
--cc=emaste@freebsd.org \
--cc=farosas@suse.de \
--cc=hreitz@redhat.com \
--cc=imp@bsdimp.com \
--cc=kevans@freebsd.org \
--cc=kwolf@redhat.com \
--cc=luoyonggang@gmail.com \
--cc=lwhsu@freebsd.org \
--cc=marcandre.lureau@redhat.com \
--cc=mchehab+huawei@kernel.org \
--cc=michael.roth@amd.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
--cc=vsementsov@yandex-team.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.