Fallback to pep517 if setup.py is present and setuptools cannot be imported
This commit is contained in:
parent
1963d79695
commit
5a8c8943b0
76
452d7da880.patch
Normal file
76
452d7da880.patch
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
From 452d7da8801ca318f280bd1c1085c60b0b6f747f Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hrn=C4=8Diar?= <thrnciar@redhat.com>
|
||||||
|
Date: Sat, 23 Apr 2022 16:56:59 +0200
|
||||||
|
Subject: [PATCH] Fallback to pyproject.toml-based builds if setuptools cannot
|
||||||
|
be imported (#10717)
|
||||||
|
|
||||||
|
This fallback is only triggered if the project has a `setup.py` file.
|
||||||
|
|
||||||
|
Co-authored-by: Tzu-ping Chung <uranusjr@gmail.com>
|
||||||
|
Co-authored-by: Pradyun Gedam <pradyunsg@gmail.com>
|
||||||
|
---
|
||||||
|
news/10717.bugfix.rst | 1 +
|
||||||
|
src/pip/_internal/cli/cmdoptions.py | 7 +++++++
|
||||||
|
src/pip/_internal/pyproject.py | 11 +++++++++--
|
||||||
|
3 files changed, 17 insertions(+), 2 deletions(-)
|
||||||
|
create mode 100644 news/10717.bugfix.rst
|
||||||
|
|
||||||
|
diff --git a/news/10717.bugfix.rst b/news/10717.bugfix.rst
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..950a4521763
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/news/10717.bugfix.rst
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+Fallback to pyproject.toml-based builds if ``setup.py`` is present in a project, but ``setuptools`` cannot be imported.
|
||||||
|
diff --git a/src/pip/_internal/cli/cmdoptions.py b/src/pip/_internal/cli/cmdoptions.py
|
||||||
|
index cd1e8a00f63..91b94e3028c 100644
|
||||||
|
--- a/src/pip/_internal/cli/cmdoptions.py
|
||||||
|
+++ b/src/pip/_internal/cli/cmdoptions.py
|
||||||
|
@@ -10,6 +10,7 @@
|
||||||
|
# The following comment should be removed at some point in the future.
|
||||||
|
# mypy: strict-optional=False
|
||||||
|
|
||||||
|
+import importlib.util
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import textwrap
|
||||||
|
@@ -770,6 +771,12 @@ def _handle_no_use_pep517(
|
||||||
|
"""
|
||||||
|
raise_option_error(parser, option=option, msg=msg)
|
||||||
|
|
||||||
|
+ # If user doesn't wish to use pep517, we check if setuptools is installed
|
||||||
|
+ # and raise error if it is not.
|
||||||
|
+ if not importlib.util.find_spec("setuptools"):
|
||||||
|
+ msg = "It is not possible to use --no-use-pep517 without setuptools installed."
|
||||||
|
+ raise_option_error(parser, option=option, msg=msg)
|
||||||
|
+
|
||||||
|
# Otherwise, --no-use-pep517 was passed via the command-line.
|
||||||
|
parser.values.use_pep517 = False
|
||||||
|
|
||||||
|
diff --git a/src/pip/_internal/pyproject.py b/src/pip/_internal/pyproject.py
|
||||||
|
index e183eaf8658..1e9119f3e5c 100644
|
||||||
|
--- a/src/pip/_internal/pyproject.py
|
||||||
|
+++ b/src/pip/_internal/pyproject.py
|
||||||
|
@@ -1,3 +1,4 @@
|
||||||
|
+import importlib.util
|
||||||
|
import os
|
||||||
|
from collections import namedtuple
|
||||||
|
from typing import Any, List, Optional
|
||||||
|
@@ -89,9 +90,15 @@ def load_pyproject_toml(
|
||||||
|
|
||||||
|
# If we haven't worked out whether to use PEP 517 yet,
|
||||||
|
# and the user hasn't explicitly stated a preference,
|
||||||
|
- # we do so if the project has a pyproject.toml file.
|
||||||
|
+ # we do so if the project has a pyproject.toml file
|
||||||
|
+ # or if we cannot import setuptools.
|
||||||
|
+
|
||||||
|
+ # We fallback to PEP 517 when without setuptools,
|
||||||
|
+ # so setuptools can be installed as a default build backend.
|
||||||
|
+ # For more info see:
|
||||||
|
+ # https://discuss.python.org/t/pip-without-setuptools-could-the-experience-be-improved/11810/9
|
||||||
|
elif use_pep517 is None:
|
||||||
|
- use_pep517 = has_pyproject
|
||||||
|
+ use_pep517 = has_pyproject or not importlib.util.find_spec("setuptools")
|
||||||
|
|
||||||
|
# At this point, we know whether we're going to use PEP 517.
|
||||||
|
assert use_pep517 is not None
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
Name: python-%{srcname}
|
Name: python-%{srcname}
|
||||||
Version: %{base_version}%{?prerel:~%{prerel}}
|
Version: %{base_version}%{?prerel:~%{prerel}}
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Summary: A tool for installing and managing Python packages
|
Summary: A tool for installing and managing Python packages
|
||||||
|
|
||||||
# We bundle a lot of libraries with pip, which itself is under MIT license.
|
# We bundle a lot of libraries with pip, which itself is under MIT license.
|
||||||
@ -89,6 +89,10 @@ Patch: nowarn-pip._internal.main.patch
|
|||||||
# Upstream issue: https://github.com/pypa/packaging/issues/368
|
# Upstream issue: https://github.com/pypa/packaging/issues/368
|
||||||
Patch: no-version-warning.patch
|
Patch: no-version-warning.patch
|
||||||
|
|
||||||
|
# Fallback to pep517 if setup.py is present and setuptools cannot be imported
|
||||||
|
# https://bugzilla.redhat.com/show_bug.cgi?id=2020635
|
||||||
|
Patch: https://github.com/pypa/pip/commit/452d7da880.patch
|
||||||
|
|
||||||
# Downstream only patch
|
# Downstream only patch
|
||||||
# Users might have local installations of pip from using
|
# Users might have local installations of pip from using
|
||||||
# `pip install --user --upgrade pip` on older/newer versions.
|
# `pip install --user --upgrade pip` on older/newer versions.
|
||||||
@ -407,6 +411,10 @@ pytest_k='not completion and
|
|||||||
%{python_wheel_dir}/%{python_wheel_name}
|
%{python_wheel_dir}/%{python_wheel_name}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Apr 26 2022 Tomáš Hrnčiar <thrnciar@redhat.com> - 22.0.4-2
|
||||||
|
- Fallback to pep517 if setup.py is present and setuptools cannot be imported
|
||||||
|
- Fixes: rhbz#2020635
|
||||||
|
|
||||||
* Mon Mar 21 2022 Karolina Surma <ksurma@redhat.com> - 22.0.4-1
|
* Mon Mar 21 2022 Karolina Surma <ksurma@redhat.com> - 22.0.4-1
|
||||||
- Update to 22.0.4
|
- Update to 22.0.4
|
||||||
Resolves: rhbz#2061262
|
Resolves: rhbz#2061262
|
||||||
|
Loading…
Reference in New Issue
Block a user