From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: jsnow@redhat.com, philmd@linaro.org, berrange@redhat.com
Subject: [PATCH v2 00/27] configure: create a python venv and ensure meson, sphinx
Date: Tue, 16 May 2023 12:57:10 +0200 [thread overview]
Message-ID: <20230516105738.526631-2-pbonzini@redhat.com> (raw)
In-Reply-To: <20230516105738.526631-1-pbonzini@redhat.com>
This patch series creates a mandatory python virtual environment
("venv") during configure time and uses it to ensure the availability of
meson and sphinx.
See https://www.qemu.org/2023/03/24/python/ for motivations. The summary
is that the goal of this series is to ensure that the `python` used to
run meson is the same `python` used to run Sphinx, tests, and any
build-time python scripting we have. As it stands, meson and sphinx (and
their extensions) *may* run in a different python environment than the
one configured and chosen by the user at configure/build time.
The effective change of this series is that QEMU will now
unconditionally create a venv at configure-time and will ensure that
meson (and sphinx, if docs are enabled) are available through that venv.
Some important points as a pre-emptive "FAQ":
- Works for Python 3.6 and up, on Fedora, OpenSuSE, Red Hat, CentOS,
Alpine, Debian, Ubuntu, NetBSD, OpenBSD, and hopefully everywhere
No new dependencies (...for most platforms. Debian and NetBSD get an
asterisk, see patch 4).
- The venv is unconditionally created and lives at {build_dir}/pyvenv.
The python interpreter used by this venv is always the one identified
by configure. (Which in turn is always the one specified by --python
or $PYTHON). --meson and --sphinx-build disappear.
- *almost* all python scripts in qemu.git executed as part of the build
system, meson, sphinx, avocado tests, vm tests or CI are always
executed within this venv. iotests are not yet integrated.
- Missing dependencies, when possible, are fetched and installed
on-demand automatically to make developer environments "just work".
However, it remains possible to build and test fully offline. Right
now, online behavior is only triggered by --enable-docs, and even
in that case...
- ... distribution packaged 'meson' and 'sphinx' are still utilized
whenever possible as the highest preference.
- The bundled 'meson' takes the shape of a .whl file, replacing the
git submodule. qemu-qmp will follow suit, while Sphinx will not be
bundled just like it already isn't.
- about 13% of the mkvenv.py script is devoted to supporting Python
3.7 and Debian 10. ¯\_(ツ)_/¯
Tested with "make check-minreqs" after every patch and with GitLab at
https://gitlab.com/bonzini/qemu/-/pipelines/868627762.
Enjoy!
John and Paolo
v1->v2:
- integrate distlib for script generation and also to look up
installed packages
- print a more precise error for --diagnose when running in an
isolated venv
- reorganized code to avoid ensurepip, so that it is not spread
across multiple patches
- made non-fatal errors a bit less scary
John Snow (23):
python: update pylint configuration
python: add mkvenv.py
mkvenv: add better error message for broken or missing ensurepip
mkvenv: add nested venv workaround
mkvenv: add ensure subcommand
mkvenv: add --diagnose option to explain "ensure" failures
mkvenv: add console script entry point generation
mkvenv: use pip's vendored distlib as a fallback
mkvenv: avoid ensurepip if pip is installed
mkvenv: work around broken pip installations on Debian 10
tests/docker: add python3-venv dependency
tests/vm: Configure netbsd to use Python 3.10
tests/vm: add py310-expat to NetBSD
python: add vendor.py utility
configure: create a python venv unconditionally
python/wheels: add vendored meson package
configure: use 'mkvenv ensure meson' to bootstrap meson
qemu.git: drop meson git submodule
tests: Use configure-provided pyvenv for tests
configure: move --enable-docs and --disable-docs back to configure
configure: bootstrap sphinx with mkvenv
configure: add --enable-pypi and --disable-pypi
configure: Add courtesy hint to Python version failure message
Paolo Bonzini (4):
python: shut up "pip install" during "make check-minreqs"
Python: Drop support for Python 3.6
mkvenv: mark command as required
python: bump some of the dependencies
.gitlab-ci.d/buildtest-template.yml | 4 +-
.gitlab-ci.d/buildtest.yml | 6 +-
.gitmodules | 3 -
configure | 152 +--
docs/about/build-platforms.rst | 2 +-
docs/conf.py | 9 -
docs/devel/acpi-bits.rst | 6 +-
docs/devel/testing.rst | 14 +-
docs/meson.build | 2 +-
meson | 1 -
meson_options.txt | 2 -
python/Makefile | 19 +-
python/scripts/mkvenv.py | 897 ++++++++++++++++++
python/scripts/vendor.py | 74 ++
python/setup.cfg | 46 +-
python/tests/flake8.sh | 1 +
python/tests/isort.sh | 1 +
python/tests/minreqs.txt | 19 +-
python/tests/mypy.sh | 1 +
python/tests/pylint.sh | 1 +
python/wheels/meson-0.61.5-py3-none-any.whl | Bin 0 -> 862509 bytes
.../org.centos/stream/8/x86_64/test-avocado | 4 +-
scripts/device-crash-test | 2 +-
scripts/meson-buildoptions.sh | 3 -
scripts/qapi/mypy.ini | 2 +-
tests/Makefile.include | 10 +-
.../dockerfiles/debian-all-test-cross.docker | 3 +-
.../dockerfiles/debian-hexagon-cross.docker | 3 +-
.../dockerfiles/debian-riscv64-cross.docker | 3 +-
.../dockerfiles/debian-tricore-cross.docker | 3 +-
tests/requirements.txt | 7 +-
tests/vm/netbsd | 2 +
32 files changed, 1167 insertions(+), 135 deletions(-)
delete mode 160000 meson
create mode 100644 python/scripts/mkvenv.py
create mode 100755 python/scripts/vendor.py
create mode 100644 python/wheels/meson-0.61.5-py3-none-any.whl
--
2.40.1
next prev parent reply other threads:[~2023-05-16 10:59 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-16 10:57 [PATCH v2 00/27] configure: create a python venv and ensure meson, sphinx Paolo Bonzini
2023-05-16 10:57 ` Paolo Bonzini [this message]
2023-05-16 18:11 ` John Snow
-- strict thread matches above, loose matches on Subject: below --
2023-05-16 10:56 Paolo Bonzini
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=20230516105738.526631-2-pbonzini@redhat.com \
--to=pbonzini@redhat.com \
--cc=berrange@redhat.com \
--cc=jsnow@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).