scripts: nudge users to use 'run' script for scripts that import qemu.qmp
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>
John Snow committed
Feb 18, 2026 at 16:34 UTC
b08e111b1e1dd553828360efebd4775abac5fbaf
13 files changed
+78
-77
scripts/compare-machine-types.py
+2
-5
@@ -27,19 +27,16 @@
27
# along with this program; if not, see <http://www.gnu.org/licenses/>.
28
29
import sys
30
-from os import path
30
from argparse import ArgumentParser, RawTextHelpFormatter, Namespace
31
import pandas as pd
32
from contextlib import ExitStack
33
from typing import Optional, List, Dict, Generator, Tuple, Union, Any, Set
34
35
try:
37
- qemu_dir = path.abspath(path.dirname(path.dirname(__file__)))
38
- sys.path.append(path.join(qemu_dir, 'python'))
36
from qemu.machine import QEMUMachine
37
except ModuleNotFoundError as exc:
41
- print(f"Module '{exc.name}' not found.")
42
- print("Try export PYTHONPATH=top-qemu-dir/python or run from top-qemu-dir")
38
+ print(f"Module '{exc.name}' not found.", file=sys.stderr)
39
+ print(f"Try $builddir/run {' '.join(sys.argv)}", file=sys.stderr)
40
sys.exit(1)
41
42
scripts/qmp/qemu-ga-client
+6
-7
@@ -1,11 +1,10 @@
1
#!/usr/bin/env python3
2
3
-import os
3
import sys
4
6
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
7
-from qemu.utils import qemu_ga_client
8
-
9
-
10
-if __name__ == '__main__':
11
- sys.exit(qemu_ga_client.main())
5
+print(
6
+ "This script has moved; after running configure,"
7
+ " please use '$builddir/run qemu-ga-client [...]' instead.",
8
+ file=sys.stderr
9
+)
10
+sys.exit(1)
scripts/qmp/qmp-shell
+6
-7
@@ -1,11 +1,10 @@
1
#!/usr/bin/env python3
2
3
-import os
3
import sys
4
6
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
7
-from qemu.qmp import qmp_shell
8
-
9
-
10
-if __name__ == '__main__':
11
- qmp_shell.main()
5
+print(
6
+ "This script has moved; after running configure,"
7
+ " please use '$builddir/run qmp-shell [...]' instead.",
8
+ file=sys.stderr
9
+)
10
+sys.exit(1)
scripts/qmp/qmp-shell-wrap
+6
-7
@@ -1,11 +1,10 @@
1
#!/usr/bin/env python3
2
3
-import os
3
import sys
4
6
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
7
-from qemu.qmp import qmp_shell
8
-
9
-
10
-if __name__ == '__main__':
11
- qmp_shell.main_wrap()
5
+print(
6
+ "This script has moved; after running configure,"
7
+ " please use '$builddir/run qmp-shell-wrap [...]' instead.",
8
+ file=sys.stderr
9
+)
10
+sys.exit(1)
scripts/qmp/qom-fuse
+6
-7
@@ -1,11 +1,10 @@
1
#!/usr/bin/env python3
2
3
-import os
3
import sys
4
6
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
7
-from qemu.utils.qom_fuse import QOMFuse
8
-
9
-
10
-if __name__ == '__main__':
11
- sys.exit(QOMFuse.entry_point())
5
+print(
6
+ "This script has moved; after running configure,"
7
+ " please use '$builddir/run qom-fuse [...]' instead.",
8
+ file=sys.stderr
9
+)
10
+sys.exit(1)
scripts/qmp/qom-get
+6
-7
@@ -1,11 +1,10 @@
1
#!/usr/bin/env python3
2
3
-import os
3
import sys
4
6
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
7
-from qemu.utils.qom import QOMGet
8
-
9
-
10
-if __name__ == '__main__':
11
- sys.exit(QOMGet.entry_point())
5
+print(
6
+ "This script has moved; after running configure,"
7
+ " please use '$builddir/run qom-get [...]' instead.",
8
+ file=sys.stderr
9
+)
10
+sys.exit(1)
scripts/qmp/qom-list
+6
-7
@@ -1,11 +1,10 @@
1
#!/usr/bin/env python3
2
3
-import os
3
import sys
4
6
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
7
-from qemu.utils.qom import QOMList
8
-
9
-
10
-if __name__ == '__main__':
11
- sys.exit(QOMList.entry_point())
5
+print(
6
+ "This script has moved; after running configure,"
7
+ " please use '$builddir/run qom-list [...]' instead.",
8
+ file=sys.stderr
9
+)
10
+sys.exit(1)
scripts/qmp/qom-set
+6
-7
@@ -1,11 +1,10 @@
1
#!/usr/bin/env python3
2
3
-import os
3
import sys
4
6
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
7
-from qemu.utils.qom import QOMSet
8
-
9
-
10
-if __name__ == '__main__':
11
- sys.exit(QOMSet.entry_point())
5
+print(
6
+ "This script has moved; after running configure,"
7
+ " please use '$builddir/run qom-set [...]' instead.",
8
+ file=sys.stderr
9
+)
10
+sys.exit(1)
scripts/qmp/qom-tree
+6
-7
@@ -1,11 +1,10 @@
1
#!/usr/bin/env python3
2
3
-import os
3
import sys
4
6
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
7
-from qemu.utils.qom import QOMTree
8
-
9
-
10
-if __name__ == '__main__':
11
- sys.exit(QOMTree.entry_point())
5
+print(
6
+ "This script has moved; after running configure,"
7
+ " please use '$builddir/run qom-tree [...]' instead.",
8
+ file=sys.stderr
9
+)
10
+sys.exit(1)
scripts/qmp_helper.py
+2
-7
@@ -13,17 +13,12 @@ import json
13
import sys
14
15
from datetime import datetime
16
-from os import path as os_path
16
17
try:
19
- qemu_dir = os_path.abspath(os_path.dirname(os_path.dirname(__file__)))
20
- sys.path.append(os_path.join(qemu_dir, 'python'))
21
-
18
from qemu.qmp.legacy import QEMUMonitorProtocol
23
-
19
except ModuleNotFoundError as exc:
25
- print(f"Module '{exc.name}' not found.")
26
- print("Try export PYTHONPATH=top-qemu-dir/python or run from top-qemu-dir")
20
+ print(f"Module '{exc.name}' not found.", file=sys.stderr)
21
+ print(f"Try $builddir/run {' '.join(sys.argv)}", file=sys.stderr)
22
sys.exit(1)
23
24
from base64 import b64encode
scripts/render_block_graph.py
+7
-3
@@ -24,9 +24,13 @@ import subprocess
24
import json
25
from graphviz import Digraph
26
27
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'python'))
28
-from qemu.qmp import QMPError
29
-from qemu.qmp.legacy import QEMUMonitorProtocol
27
+try:
28
+ from qemu.qmp import QMPError
29
+ from qemu.qmp.legacy import QEMUMonitorProtocol
30
+except ModuleNotFoundError as exc:
31
+ print(f"Module '{exc.name}' not found.", file=sys.stderr)
32
+ print(f"Try $builddir/run {' '.join(sys.argv)}", file=sys.stderr)
33
+ sys.exit(1)
34
35
36
def perm(arr):
scripts/simplebench/bench_block_job.py
+7
-3
@@ -25,9 +25,13 @@ import subprocess
25
import socket
26
import json
27
28
-sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
29
-from qemu.machine import QEMUMachine
30
-from qemu.qmp import ConnectError
28
+try:
29
+ from qemu.machine import QEMUMachine
30
+ from qemu.qmp import ConnectError
31
+except ModuleNotFoundError as exc:
32
+ print(f"Module '{exc.name}' not found.", file=sys.stderr)
33
+ print(f"Try $builddir/run {' '.join(sys.argv)}", file=sys.stderr)
34
+ sys.exit(1)
35
36
37
def bench_block_job(cmd, cmd_args, qemu_args):
tests/migration-stress/guestperf/engine.py
+12
-3
@@ -27,9 +27,18 @@ from guestperf.progress import Progress, ProgressStats
27
from guestperf.report import Report, ReportResult
28
from guestperf.timings import TimingRecord, Timings
29
30
-sys.path.append(os.path.join(os.path.dirname(__file__),
31
- '..', '..', '..', 'python'))
32
-from qemu.machine import QEMUMachine
30
+try:
31
+ from qemu.machine import QEMUMachine
32
+except ModuleNotFoundError as exc:
33
+ print(
34
+ f"Module '{exc.name}' not found.\n"
35
+ "It should be installed as part of the configure-time "
36
+ "virtual environment in $builddir/pyvenv.\n"
37
+ "Try re-running this script as:\n"
38
+ f"> $builddir/run {' '.join(sys.argv)}",
39
+ file=sys.stderr
40
+ )
41
+ sys.exit(1)
42
43
# multifd supported compression algorithms
44
MULTIFD_CMP_ALGS = ("zlib", "zstd", "qpl", "uadk")