On Mon, Jan 19, 2026 at 4:28 PM John Snow <[email protected]> wrote:
>
> Hello!
>
> This series drops the in-tree version of our python-qemu-qmp package
> ("qemu.qmp") in favor of the version hosted on PyPI, whose repository is
> located at https://gitlab.com/qemu-project/python-qemu-qmp.
>
> GitLab CI: https://gitlab.com/jsnow/qemu/-/pipelines/2272170300
Current status of this series: all patches reviewed by either Thomas,
Dan or Vladimir; except:
[PATCH v4 04/17] python/mkvenv: add mechanism to install local package(s)
- Review from Paolo would be nice, if he has the time.
[PATCH v4 05/17] meson, mkvenv: add functests custom target
- Fixed comments as per Dan's review
[PATCH v4 11/17] meson, mkvenv: add qemu.git/python/qemu package to
pythondeps.toml
- Probably fine, but a Paolo ACK would be nice.
[PATCH v4 13/17] tests: remove "make check-venv" target
- I regress an optimization Alex Bennee made, would like to fix
this before merge.
[PATCH v4 16/17] python: update README.rst to reflect qemu.qmp's removal
- Discussing this with Dan
[PATCH v4 17/17] RFC: exclude pyvenv targets from "make check-build"
- Still not clear if we want this or not, I'm pretty neutral.
>
> This version reflects Dan's suggestion to always install the in-tree
> Python packages by default.
>
> The major effects of this patch series are:
>
> 1. qemu.qmp and the python/ directory will be installed to the
> configure-time venv (build/pyvenv) by default.
> 2. qemu.qmp will be installed from PyPI or vendored packages instead of
> being utilized directly from the qemu.git tree.
> 3. "make check-venv" is removed as it is no longer needed.
> 4. functional test dependencies are installed as-needed when running
> those tests.
> 5. Unfortunately, python3-wheel and python3-setuptools are now required
> on the host system if tests are to be executed and >= Python 3.13 is
> used.
> 6. An awful lot of deleted lines of code, and a lot fewer headaches
> managing two nearly-identical copies of this source code. O:-)
>
> v4:
>
> - Rename "checktests" group to "tooling", install it by default
> alongside meson at configure-time.
> - Remove "check-venv" entirely.
> - Update python/README.rst to reflect the new paradigm
> - Update many scripts that import qemu.qmp to give new errors when they
> are run outside of the configure venv
>
> KNOWN ISSUES IN V4:
>
> - The last patch is an RFC based on Thomas' observations, I don't have
> a strong opinion on if we want it or not.
> - Removing "make check-venv" causes the VM tests to rebuild more often;
> I was not sure how to replace the old conditional behavior in an
> equivalent manner. Suggestions, anyone...?
>
> v3:
>
> - Fixed FreeBSD vm test
> - Fixed Cirrus macOS test (Needed setuptools as a dep, "file:///" had
> one too many forward slashes, which works fine for older
> pip/setuptools, but was incompatibly fixed recently.)
> - Fixed an issue that prevented installing the local python packages in
> an offline, isolated build environment (need --no-isolated-build and
> pip environment variable flags)
> - Added the python3-wheel and python3-setuptools build dependencies to
> lcitool, owing to the above issues
> - Ensured that the $download flag (for PyPI access) from configure is
> carried over into pytest/meson.build invocations. This defaults to
> "enabled", so test dependencies should not have any issue being
> fetched on most developer workstations and build environments.
> - Fixed several bugs in the mkvenv.py local package installation mechanism.
> - Flags and workarounds added for installing local packages offline now
> apply *only* to local package installations, and not "normal"
> depspecs.
> - Reordered patches into more logical "phases" for easier review (I
> hope...?)
>
> Known issues: "make check-build" still installs all of the test
> dependencies to the pyvenv. I'm not sure if this is desired or not, but
> I ran into problems preventing it from doing this without breaking a ton
> of CI tests. I'll continue to investigate this, but wanted to send this
> v3 out.
>
> v2:
>
> - move "make check-venv" earlier in GitLab CI/CD pipeline, to avoid
> re-running configure
> - Fix functional tests not using PyPI to fetch pygdbmi package
> - Remove pre-requisites which are now merged
>
> --js
>
> John Snow (17):
> python/mkvenv: create timestamp file for each group "ensured"
> python/mkvenv: bump 'qemu.qmp' dependency for testdeps
> python/mkvenv: add 'tooling' and 'functests' dependency groups
> python/mkvenv: add mechanism to install local package(s)
> meson, mkvenv: add functests custom target
> tests: Use configured python to run GitLab iotests
> tests: use "run" script to execute device-crash-test
> tests/lcitool: add python3 wheel and setuptools deps for qemu
> python: add vendored qemu.qmp package
> meson, mkvenv: make functional tests depend on functests group
> meson, mkvenv: add qemu.git/python/qemu package to pythondeps.toml
> configure: unconditionally install "tooling" group
> tests: remove "make check-venv" target
> scripts: nudge users to use 'run' script for scripts that import
> qemu.qmp
> python: delete qemu.qmp
> python: update README.rst to reflect qemu.qmp's removal
> RFC: exclude pyvenv targets from "make check-build"
>
> python/README.rst | 50 +-
> configure | 2 +-
> meson.build | 1 +
> .gitlab-ci.d/buildtest.yml | 26 +-
> .gitlab-ci.d/cirrus/freebsd-14.vars | 2 +-
> .gitlab-ci.d/cirrus/macos-14.vars | 2 +-
> .gitlab-ci.d/windows.yml | 2 +
> python/qemu/qmp/__init__.py | 60 -
> python/qemu/qmp/error.py | 53 -
> python/qemu/qmp/events.py | 751 -----------
> python/qemu/qmp/legacy.py | 339 -----
> python/qemu/qmp/message.py | 217 ----
> python/qemu/qmp/models.py | 146 ---
> python/qemu/qmp/protocol.py | 1101 -----------------
> python/qemu/qmp/py.typed | 0
> python/qemu/qmp/qmp_client.py | 732 -----------
> python/qemu/qmp/qmp_shell.py | 689 -----------
> python/qemu/qmp/qmp_tui.py | 665 ----------
> python/qemu/qmp/util.py | 150 ---
> python/qemu/utils/qom_fuse.py | 1 -
> python/scripts/mkvenv.py | 44 +-
> python/scripts/vendor.py | 2 +
> python/setup.cfg | 31 +-
> python/tests/minreqs.txt | 8 +-
> python/tests/protocol.py | 596 ---------
> python/wheels/qemu_qmp-0.0.5-py3-none-any.whl | Bin 0 -> 72263 bytes
> pythondeps.toml | 13 +-
> pyvenv/meson.build | 28 +
> scripts/compare-machine-types.py | 7 +-
> scripts/device-crash-test | 5 +-
> scripts/mtest2make.py | 4 +-
> 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/Makefile.include | 22 +-
> tests/docker/dockerfiles/alpine.docker | 2 +
> tests/docker/dockerfiles/centos9.docker | 2 +
> tests/functional/meson.build | 5 +-
> tests/lcitool/projects/qemu.yml | 2 +
> tests/migration-stress/guestperf/engine.py | 15 +-
> tests/vm/Makefile.include | 24 +-
> tests/vm/generated/freebsd.json | 2 +
> 50 files changed, 250 insertions(+), 5684 deletions(-)
> delete mode 100644 python/qemu/qmp/__init__.py
> delete mode 100644 python/qemu/qmp/error.py
> delete mode 100644 python/qemu/qmp/events.py
> delete mode 100644 python/qemu/qmp/legacy.py
> delete mode 100644 python/qemu/qmp/message.py
> delete mode 100644 python/qemu/qmp/models.py
> delete mode 100644 python/qemu/qmp/protocol.py
> delete mode 100644 python/qemu/qmp/py.typed
> delete mode 100644 python/qemu/qmp/qmp_client.py
> delete mode 100644 python/qemu/qmp/qmp_shell.py
> delete mode 100644 python/qemu/qmp/qmp_tui.py
> delete mode 100644 python/qemu/qmp/util.py
> delete mode 100644 python/tests/protocol.py
> create mode 100644 python/wheels/qemu_qmp-0.0.5-py3-none-any.whl
> create mode 100644 pyvenv/meson.build
>
> --
> 2.52.0
>
>