[PATCH] python: fix editable installs for modern pip/setuptools

John Snow posted 1 patch 4 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20250715222548.198888-1-jsnow@redhat.com
Maintainers: John Snow <jsnow@redhat.com>, Cleber Rosa <crosa@redhat.com>
python/Makefile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] python: fix editable installs for modern pip/setuptools
Posted by John Snow 4 months ago
The way editable installs work has changed at some point since Fedora 40
was released. Generally, we should be opting to use pyproject.toml
installs (PEP517/518) - but those are not fully supported until v61 of
setuptools, and CentOS Stream 9 ships v53.

Until that time, we can make use of a transitional feature in
pip/setuptools to use "legacy" editable installs, which is enough to fix
"make check-dev" on modern local workstations for now.

By using the environment variable approach to configure pip, we avoid
any problems for older versions of pip that don't recognize this option,
so it's harmless. The config-settings option first appeared in v23 of
pip. editable_mode was first supported by setuptools in v64.

(I'm not currently precisely aware of when the default behavior of '-e'
switched away from 'compat', but it appears to be a joint effect between
setuptools and pip versions.)

Version information for supported build platforms:

distro              python3  pip     setuptools  sphinx
--------------------------------------------------------
centos_stream_9     3.9.23   21.3.1  53.0.0      3.4.3
ubuntu_22_04        3.10.12  22.0.2  59.6.0      4.3.2

** pyproject.toml installs supported as of here **

freebsd             3.11.13  23.3.2  63.1.0      5.3.0
debian_12           3.11.2   23.0.1  66.1.1      5.3.0
ubuntu_24_04        3.12.3   24.0    68.1.2      7.2.6
centos_stream_10    3.12.11  23.3.2  69.0.3      7.2.6
fedora_41           3.13.5   24.2    69.2.0      7.3.7
alpine_3_19         3.11.13  23.3.1  70.3.0      6.2.1
alpine_3_20         3.12.11  24.0    70.3.0      7.2.6
alpine_3_21         3.12.11  24.3.1  70.3.0      8.1.3
ubuntu_24_10        3.12.7   24.2    74.1.2      7.4.7
fedora_42           3.13.5   24.3.1  74.1.3      8.1.3
ubuntu_25_04        3.13.3   25.0    75.8.0      8.1.3
macports            3.13.5   25.1.1  78.1.1      8.2.3
openbsd             3.12.11  25.1.1  79.0.1      8.2.3
alpine_3_22         3.12.11  25.1.1  80.9.0      8.2.3
homebrew            3.13.5   ---     80.9.0      8.2.3
pkgsrc_current      3.12.11  25.1.1  80.9.0      8.2.3

Signed-off-by: John Snow <jsnow@redhat.com>
---
 python/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/python/Makefile b/python/Makefile
index 764b79ccb23..32aedce4137 100644
--- a/python/Makefile
+++ b/python/Makefile
@@ -68,7 +68,7 @@ $(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate: setup.cfg tests/minreqs.tx
 		echo "INSTALL -r tests/minreqs.txt $(QEMU_MINVENV_DIR)";\
 		$(PIP_INSTALL) -r tests/minreqs.txt 1>/dev/null;	\
 		echo "INSTALL -e qemu $(QEMU_MINVENV_DIR)";		\
-		$(PIP_INSTALL) -e . 1>/dev/null;			\
+		PIP_CONFIG_SETTINGS="editable_mode=compat" $(PIP_INSTALL) -e . 1>/dev/null;	\
 	)
 	@touch $(QEMU_MINVENV_DIR)
 
@@ -103,7 +103,7 @@ check-dev: dev-venv
 
 .PHONY: develop
 develop:
-	$(PIP_INSTALL) -e .[devel]
+	PIP_CONFIG_SETTINGS="editable_mode=compat" $(PIP_INSTALL) -e .[devel]
 
 .PHONY: check
 check:
-- 
2.50.0
Re: [PATCH] python: fix editable installs for modern pip/setuptools
Posted by Markus Armbruster 4 months ago
Queued for 10.1.  Thanks!
Re: [PATCH] python: fix editable installs for modern pip/setuptools
Posted by Markus Armbruster 4 months ago
John Snow <jsnow@redhat.com> writes:

> The way editable installs work has changed at some point since Fedora 40
> was released. Generally, we should be opting to use pyproject.toml
> installs (PEP517/518) - but those are not fully supported until v61 of
> setuptools, and CentOS Stream 9 ships v53.
>
> Until that time, we can make use of a transitional feature in
> pip/setuptools to use "legacy" editable installs, which is enough to fix
> "make check-dev" on modern local workstations for now.

This fixes "make check-dev" for me on Fedora 41.  Thank you!

Tested-by: Markus Armbruster <armbru@redhat.com>

[...]
Re: [PATCH] python: fix editable installs for modern pip/setuptools
Posted by John Snow 4 months ago
On Tue, Jul 15, 2025, 6:27 PM John Snow <jsnow@redhat.com> wrote:

> The way editable installs work has changed at some point since Fedora 40
> was released. Generally, we should be opting to use pyproject.toml
> installs (PEP517/518) - but those are not fully supported until v61 of
> setuptools, and CentOS Stream 9 ships v53.
>
> Until that time, we can make use of a transitional feature in
> pip/setuptools to use "legacy" editable installs, which is enough to fix
> "make check-dev" on modern local workstations for now.
>
> By using the environment variable approach to configure pip, we avoid
> any problems for older versions of pip that don't recognize this option,
> so it's harmless. The config-settings option first appeared in v23 of
> pip. editable_mode was first supported by setuptools in v64.
>
> (I'm not currently precisely aware of when the default behavior of '-e'
> switched away from 'compat', but it appears to be a joint effect between
> setuptools and pip versions.)
>
> Version information for supported build platforms:
>
> distro              python3  pip     setuptools  sphinx
> --------------------------------------------------------
> centos_stream_9     3.9.23   21.3.1  53.0.0      3.4.3
> ubuntu_22_04        3.10.12  22.0.2  59.6.0      4.3.2
>
> ** pyproject.toml installs supported as of here **
>
> freebsd             3.11.13  23.3.2  63.1.0      5.3.0
> debian_12           3.11.2   23.0.1  66.1.1      5.3.0
> ubuntu_24_04        3.12.3   24.0    68.1.2      7.2.6
> centos_stream_10    3.12.11  23.3.2  69.0.3      7.2.6
> fedora_41           3.13.5   24.2    69.2.0      7.3.7
> alpine_3_19         3.11.13  23.3.1  70.3.0      6.2.1
> alpine_3_20         3.12.11  24.0    70.3.0      7.2.6
> alpine_3_21         3.12.11  24.3.1  70.3.0      8.1.3
> ubuntu_24_10        3.12.7   24.2    74.1.2      7.4.7
> fedora_42           3.13.5   24.3.1  74.1.3      8.1.3
> ubuntu_25_04        3.13.3   25.0    75.8.0      8.1.3
> macports            3.13.5   25.1.1  78.1.1      8.2.3
> openbsd             3.12.11  25.1.1  79.0.1      8.2.3
> alpine_3_22         3.12.11  25.1.1  80.9.0      8.2.3
> homebrew            3.13.5   ---     80.9.0      8.2.3
> pkgsrc_current      3.12.11  25.1.1  80.9.0      8.2.3
>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>  python/Makefile | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/python/Makefile b/python/Makefile
> index 764b79ccb23..32aedce4137 100644
> --- a/python/Makefile
> +++ b/python/Makefile
> @@ -68,7 +68,7 @@ $(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate:
> setup.cfg tests/minreqs.tx
>                 echo "INSTALL -r tests/minreqs.txt $(QEMU_MINVENV_DIR)";\
>                 $(PIP_INSTALL) -r tests/minreqs.txt 1>/dev/null;        \
>                 echo "INSTALL -e qemu $(QEMU_MINVENV_DIR)";             \
> -               $(PIP_INSTALL) -e . 1>/dev/null;                        \
> +               PIP_CONFIG_SETTINGS="editable_mode=compat" $(PIP_INSTALL)
> -e . 1>/dev/null;     \
>         )
>         @touch $(QEMU_MINVENV_DIR)
>
> @@ -103,7 +103,7 @@ check-dev: dev-venv
>
>  .PHONY: develop
>  develop:
> -       $(PIP_INSTALL) -e .[devel]
> +       PIP_CONFIG_SETTINGS="editable_mode=compat" $(PIP_INSTALL) -e
> .[devel]
>
>  .PHONY: check
>  check:
> --
> 2.50.0
>

For what it's worth, I think this patch is safe to include in an early rc
as it should effect only testing - but if we don't feel it is safe, it's
also a very work-aroundable problem.

>