From 077867237b0ec3c327997d13745018adf23d3abf Mon Sep 17 00:00:00 2001 From: Thomas VINCENT Date: Mon, 29 Nov 2021 13:31:02 +0100 Subject: [PATCH 1/5] Add test to reproduce issue #10222 --- tests/functional/test_install.py | 39 ++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/functional/test_install.py b/tests/functional/test_install.py index a2f1ffb885b..7cbf2bf45e6 100644 --- a/tests/functional/test_install.py +++ b/tests/functional/test_install.py @@ -788,6 +788,45 @@ def test_editable_install__local_dir_setup_requires_with_pyproject( script.pip("install", "--find-links", shared_data.find_links, "-e", local_dir) +def test_install_pre__setup_requires_with_pyproject( + script: PipTestEnvironment, shared_data: TestData, common_wheels: Path +) -> None: + """ + Test installing with a pre-release build dependency declared in both + setup.py and pyproject.toml. + + https://github.com/pypa/pip/issues/10573 + """ + depends_package = "prerelease_dependency" + depends_path = create_basic_wheel_for_package(script, depends_package, "1.0.0a1") + + local_dir = script.scratch_path.joinpath("temp") + local_dir.mkdir() + pyproject_path = local_dir.joinpath("pyproject.toml") + pyproject_path.write_text( + "[build-system]\n" + f'requires = ["setuptools", "wheel", "{depends_package}"]\n' + 'build-backend = "setuptools.build_meta"\n' + ) + setup_py_path = local_dir.joinpath("setup.py") + setup_py_path.write_text( + "from setuptools import setup\n" + f"setup(name='dummy', setup_requires=['{depends_package}'])\n" + ) + + script.pip( + "install", + "--pre", + "--no-cache-dir", + "--no-index", + "--find-links", + common_wheels, + "--find-links", + depends_path.parent, + local_dir, + ) + + @pytest.mark.network def test_upgrade_argparse_shadowed(script: PipTestEnvironment) -> None: # If argparse is installed - even if shadowed for imported - we support From 67d35eaeb1dc1ad086c4d0b368907c64a362edd1 Mon Sep 17 00:00:00 2001 From: Thomas VINCENT Date: Mon, 29 Nov 2021 13:34:26 +0100 Subject: [PATCH 2/5] Fix support of pre-release dependencies --- src/pip/_internal/build_env.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pip/_internal/build_env.py b/src/pip/_internal/build_env.py index d326dc8cdb1..47b90d512f8 100644 --- a/src/pip/_internal/build_env.py +++ b/src/pip/_internal/build_env.py @@ -179,7 +179,7 @@ def check_requirements( installed_req_str = f"{req.name}=={dist.version}" else: installed_req_str = f"{req.name}==={dist.version}" - if dist.version not in req.specifier: + if not req.specifier.contains(dist.version, prereleases=True): conflicting.add((installed_req_str, req_str)) # FIXME: Consider direct URL? return conflicting, missing From 36c61ea14df261aba816dc5e7e45e816574e6aa3 Mon Sep 17 00:00:00 2001 From: Thomas VINCENT Date: Mon, 29 Nov 2021 13:44:30 +0100 Subject: [PATCH 3/5] Add news entry --- news/10222.bugfix.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 news/10222.bugfix.rst diff --git a/news/10222.bugfix.rst b/news/10222.bugfix.rst new file mode 100644 index 00000000000..ff78428b1ec --- /dev/null +++ b/news/10222.bugfix.rst @@ -0,0 +1 @@ +Fix ``pip install --pre`` for packages with pre-release dependencies defined both in ``pyproject.toml`` and ``setup.py``. From 886bd5cabf8cb1ca2d01208e3b338a1cde6d13cb Mon Sep 17 00:00:00 2001 From: Thomas VINCENT Date: Mon, 29 Nov 2021 15:34:04 +0100 Subject: [PATCH 4/5] Update news --- news/10222.bugfix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/news/10222.bugfix.rst b/news/10222.bugfix.rst index ff78428b1ec..9fc66231b5b 100644 --- a/news/10222.bugfix.rst +++ b/news/10222.bugfix.rst @@ -1 +1 @@ -Fix ``pip install --pre`` for packages with pre-release dependencies defined both in ``pyproject.toml`` and ``setup.py``. +Fix ``pip install --pre`` for packages with pre-release build dependencies defined both in ``pyproject.toml`` and ``setup.py``. From 23b09c10281cb53fc94845a5557f59a86cc8534a Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 30 Nov 2021 01:06:24 +0800 Subject: [PATCH 5/5] News fragment clarification Co-authored-by: Thomas VINCENT --- news/10222.bugfix.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/news/10222.bugfix.rst b/news/10222.bugfix.rst index 9fc66231b5b..0595e2b87e5 100644 --- a/news/10222.bugfix.rst +++ b/news/10222.bugfix.rst @@ -1 +1 @@ -Fix ``pip install --pre`` for packages with pre-release build dependencies defined both in ``pyproject.toml`` and ``setup.py``. +Fix ``pip install --pre`` for packages with pre-release build dependencies defined both in ``pyproject.toml``'s ``build-system.requires`` and ``setup.py``'s ``setup_requires``.