Toshaan Bharvani
1 year ago
commit
78e2973f4d
8 changed files with 646 additions and 0 deletions
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
From 4944f6ff75e0a5e28d9719ae30dba03f196f2acf Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz> |
||||
Date: Tue, 21 Mar 2023 16:42:09 +0100 |
||||
Subject: [PATCH] Make sphinx.ext.extlinks captions actual string templates |
||||
|
||||
In Sphinx 3, this used to be a prefix, but it is the full caption since Sphinx 4: |
||||
|
||||
https://github.com/sphinx-doc/sphinx/commit/fb39974486ab09320f0cf45f3c0ba0175f04d7d6 |
||||
|
||||
With Sphinx 6, captions without %s fail: |
||||
|
||||
https://github.com/sphinx-doc/sphinx/commit/ce31e1c0c7b32f6be93186e0fef076ef65ff0b05 |
||||
|
||||
Exception occurred: |
||||
File "/usr/lib/python3.11/site-packages/sphinx/ext/extlinks.py", line 103, in role |
||||
title = caption % part |
||||
~~~~~~~~^~~~~~ |
||||
TypeError: not all arguments converted during string formatting |
||||
|
||||
Fixes Fedora downstream report: https://bugzilla.redhat.com/2180479 |
||||
--- |
||||
docs/html/conf.py | 6 +++--- |
||||
1 file changed, 3 insertions(+), 3 deletions(-) |
||||
|
||||
diff --git a/docs/html/conf.py b/docs/html/conf.py |
||||
index cc967e0ba3c..aae1364b87a 100644 |
||||
--- a/docs/html/conf.py |
||||
+++ b/docs/html/conf.py |
||||
@@ -74,9 +74,9 @@ |
||||
# -- Options for extlinks ------------------------------------------------------------- |
||||
|
||||
extlinks = { |
||||
- "issue": ("https://github.com/pypa/pip/issues/%s", "#"), |
||||
- "pull": ("https://github.com/pypa/pip/pull/%s", "PR #"), |
||||
- "pypi": ("https://pypi.org/project/%s/", ""), |
||||
+ "issue": ("https://github.com/pypa/pip/issues/%s", "#%s"), |
||||
+ "pull": ("https://github.com/pypa/pip/pull/%s", "PR #%s"), |
||||
+ "pypi": ("https://pypi.org/project/%s/", "%s"), |
||||
} |
||||
|
||||
# -- Options for towncrier_draft extension -------------------------------------------- |
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
From 30a13bcaa7b0139c200458878a21e5467121fa34 Mon Sep 17 00:00:00 2001 |
||||
From: Pradyun Gedam <pradyunsg@users.noreply.github.com> |
||||
Date: Mon, 27 Mar 2023 12:49:35 +0100 |
||||
Subject: [PATCH 1/3] Add `--kep-going` to documentation build flags |
||||
|
||||
This ensures that all warnings are printed for Sphinx builds. |
||||
--- |
||||
noxfile.py | 1 + |
||||
1 file changed, 1 insertion(+) |
||||
|
||||
diff --git a/noxfile.py b/noxfile.py |
||||
index 5c4683b7d79..565a5039955 100644 |
||||
--- a/noxfile.py |
||||
+++ b/noxfile.py |
||||
@@ -133,6 +133,7 @@ def get_sphinx_build_command(kind: str) -> List[str]: |
||||
# fmt: off |
||||
return [ |
||||
"sphinx-build", |
||||
+ "--keep-going", |
||||
"-W", |
||||
"-c", "docs/html", # see note above |
||||
"-d", "docs/build/doctrees/" + kind, |
||||
|
||||
From 4fccbf0c74d252fd2301df397002c783ac6ad057 Mon Sep 17 00:00:00 2001 |
||||
From: Pradyun Gedam <pradyunsg@users.noreply.github.com> |
||||
Date: Mon, 27 Mar 2023 12:50:43 +0100 |
||||
Subject: [PATCH 2/3] Use a standard Sphinx document reference rather than |
||||
Markdown syntax |
||||
|
||||
This avoids providing too much information or using weird mechanics to |
||||
build across various MyST-Parser versions. |
||||
--- |
||||
docs/html/getting-started.md | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/docs/html/getting-started.md b/docs/html/getting-started.md |
||||
index 0967b0eb99f..2b3f0bc9310 100644 |
||||
--- a/docs/html/getting-started.md |
||||
+++ b/docs/html/getting-started.md |
||||
@@ -98,5 +98,5 @@ Successfully uninstalled sampleproject |
||||
## Next Steps |
||||
|
||||
It is recommended to learn about what virtual environments are and how to use |
||||
-them. This is covered in the ["Installing Packages"](pypug:tutorials/installing-packages) |
||||
+them. This is covered in the {doc}`Installing Packages <pypug:tutorials/installing-packages>` |
||||
tutorial on packaging.python.org. |
||||
|
||||
From 6810341fd010d721541e87ba3125b275d0108c45 Mon Sep 17 00:00:00 2001 |
||||
From: Pradyun Gedam <pradyunsg@users.noreply.github.com> |
||||
Date: Mon, 27 Mar 2023 12:51:17 +0100 |
||||
Subject: [PATCH 3/3] Bump to Sphinx 6 |
||||
|
||||
This is the current latest version of Sphinx. |
||||
--- |
||||
docs/requirements.txt | 2 +- |
||||
1 file changed, 1 insertion(+), 1 deletion(-) |
||||
|
||||
diff --git a/docs/requirements.txt b/docs/requirements.txt |
||||
index fa3a7390c15..ef72c8fb722 100644 |
||||
--- a/docs/requirements.txt |
||||
+++ b/docs/requirements.txt |
||||
@@ -1,4 +1,4 @@ |
||||
-sphinx ~= 4.2, != 4.4.0 |
||||
+sphinx ~= 6.0 |
||||
towncrier |
||||
furo |
||||
myst_parser |
@ -0,0 +1,128 @@
@@ -0,0 +1,128 @@
|
||||
From 09c983fdeabe3fa0b90b73f32ddf84a61e498e09 Mon Sep 17 00:00:00 2001 |
||||
From: Karolina Surma <ksurma@redhat.com> |
||||
Date: Tue, 15 Nov 2022 09:22:46 +0100 |
||||
Subject: [PATCH] Dummy certifi patch |
||||
|
||||
--- |
||||
src/pip/_vendor/certifi/core.py | 105 ++------------------------------ |
||||
1 file changed, 6 insertions(+), 99 deletions(-) |
||||
|
||||
diff --git a/src/pip/_vendor/certifi/core.py b/src/pip/_vendor/certifi/core.py |
||||
index c3e5466..eb297f7 100644 |
||||
--- a/src/pip/_vendor/certifi/core.py |
||||
+++ b/src/pip/_vendor/certifi/core.py |
||||
@@ -4,105 +4,12 @@ certifi.py |
||||
|
||||
This module returns the installation location of cacert.pem or its contents. |
||||
""" |
||||
-import sys |
||||
|
||||
+# The RPM-packaged certifi always uses the system certificates |
||||
+def where() -> str: |
||||
+ return '/etc/pki/tls/certs/ca-bundle.crt' |
||||
|
||||
-if sys.version_info >= (3, 11): |
||||
+def contents() -> str: |
||||
+ with open(where(), encoding='utf=8') as data: |
||||
+ return data.read() |
||||
|
||||
- from importlib.resources import as_file, files |
||||
- |
||||
- _CACERT_CTX = None |
||||
- _CACERT_PATH = None |
||||
- |
||||
- def where() -> str: |
||||
- # This is slightly terrible, but we want to delay extracting the file |
||||
- # in cases where we're inside of a zipimport situation until someone |
||||
- # actually calls where(), but we don't want to re-extract the file |
||||
- # on every call of where(), so we'll do it once then store it in a |
||||
- # global variable. |
||||
- global _CACERT_CTX |
||||
- global _CACERT_PATH |
||||
- if _CACERT_PATH is None: |
||||
- # This is slightly janky, the importlib.resources API wants you to |
||||
- # manage the cleanup of this file, so it doesn't actually return a |
||||
- # path, it returns a context manager that will give you the path |
||||
- # when you enter it and will do any cleanup when you leave it. In |
||||
- # the common case of not needing a temporary file, it will just |
||||
- # return the file system location and the __exit__() is a no-op. |
||||
- # |
||||
- # We also have to hold onto the actual context manager, because |
||||
- # it will do the cleanup whenever it gets garbage collected, so |
||||
- # we will also store that at the global level as well. |
||||
- _CACERT_CTX = as_file(files("pip._vendor.certifi").joinpath("cacert.pem")) |
||||
- _CACERT_PATH = str(_CACERT_CTX.__enter__()) |
||||
- |
||||
- return _CACERT_PATH |
||||
- |
||||
- def contents() -> str: |
||||
- return files("pip._vendor.certifi").joinpath("cacert.pem").read_text(encoding="ascii") |
||||
- |
||||
-elif sys.version_info >= (3, 7): |
||||
- |
||||
- from importlib.resources import path as get_path, read_text |
||||
- |
||||
- _CACERT_CTX = None |
||||
- _CACERT_PATH = None |
||||
- |
||||
- def where() -> str: |
||||
- # This is slightly terrible, but we want to delay extracting the |
||||
- # file in cases where we're inside of a zipimport situation until |
||||
- # someone actually calls where(), but we don't want to re-extract |
||||
- # the file on every call of where(), so we'll do it once then store |
||||
- # it in a global variable. |
||||
- global _CACERT_CTX |
||||
- global _CACERT_PATH |
||||
- if _CACERT_PATH is None: |
||||
- # This is slightly janky, the importlib.resources API wants you |
||||
- # to manage the cleanup of this file, so it doesn't actually |
||||
- # return a path, it returns a context manager that will give |
||||
- # you the path when you enter it and will do any cleanup when |
||||
- # you leave it. In the common case of not needing a temporary |
||||
- # file, it will just return the file system location and the |
||||
- # __exit__() is a no-op. |
||||
- # |
||||
- # We also have to hold onto the actual context manager, because |
||||
- # it will do the cleanup whenever it gets garbage collected, so |
||||
- # we will also store that at the global level as well. |
||||
- _CACERT_CTX = get_path("pip._vendor.certifi", "cacert.pem") |
||||
- _CACERT_PATH = str(_CACERT_CTX.__enter__()) |
||||
- |
||||
- return _CACERT_PATH |
||||
- |
||||
- def contents() -> str: |
||||
- return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii") |
||||
- |
||||
-else: |
||||
- import os |
||||
- import types |
||||
- from typing import Union |
||||
- |
||||
- Package = Union[types.ModuleType, str] |
||||
- Resource = Union[str, "os.PathLike"] |
||||
- |
||||
- # This fallback will work for Python versions prior to 3.7 that lack the |
||||
- # importlib.resources module but relies on the existing `where` function |
||||
- # so won't address issues with environments like PyOxidizer that don't set |
||||
- # __file__ on modules. |
||||
- def read_text( |
||||
- package: Package, |
||||
- resource: Resource, |
||||
- encoding: str = 'utf-8', |
||||
- errors: str = 'strict' |
||||
- ) -> str: |
||||
- with open(where(), encoding=encoding) as data: |
||||
- return data.read() |
||||
- |
||||
- # If we don't have importlib.resources, then we will just do the old logic |
||||
- # of assuming we're on the filesystem and munge the path directly. |
||||
- def where() -> str: |
||||
- f = os.path.dirname(__file__) |
||||
- |
||||
- return os.path.join(f, "cacert.pem") |
||||
- |
||||
- def contents() -> str: |
||||
- return read_text("pip._vendor.certifi", "cacert.pem", encoding="ascii") |
||||
-- |
||||
2.37.3 |
||||
|
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
diff --git a/src/pip/_vendor/packaging/version.py b/src/pip/_vendor/packaging/version.py |
||||
index de9a09a..154e94d 100644 |
||||
--- a/src/pip/_vendor/packaging/version.py |
||||
+++ b/src/pip/_vendor/packaging/version.py |
||||
@@ -108,11 +108,6 @@ class LegacyVersion(_BaseVersion): |
||||
self._version = str(version) |
||||
self._key = _legacy_cmpkey(self._version) |
||||
|
||||
- warnings.warn( |
||||
- "Creating a LegacyVersion has been deprecated and will be " |
||||
- "removed in the next major release", |
||||
- DeprecationWarning, |
||||
- ) |
||||
|
||||
def __str__(self) -> str: |
||||
return self._version |
@ -0,0 +1,76 @@
@@ -0,0 +1,76 @@
|
||||
From 8dd3793d1bab226cec9c5c49b01718a9634bc403 Mon Sep 17 00:00:00 2001 |
||||
From: Karolina Surma <ksurma@redhat.com> |
||||
Date: Mon, 10 May 2021 16:48:49 +0200 |
||||
Subject: [PATCH] Don't warn the user about pip._internal.main() entrypoint |
||||
|
||||
In Fedora, we use that in ensurepip and users cannot do anything about it, |
||||
this warning is juts moot. Also, the warning breaks CPython test suite. |
||||
|
||||
Co-Authored-By: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz> |
||||
--- |
||||
src/pip/_internal/__init__.py | 2 +- |
||||
src/pip/_internal/utils/entrypoints.py | 19 ++++++++++--------- |
||||
tests/functional/test_cli.py | 3 ++- |
||||
3 files changed, 13 insertions(+), 11 deletions(-) |
||||
|
||||
diff --git a/src/pip/_internal/__init__.py b/src/pip/_internal/__init__.py |
||||
index 6afb5c6..faf25af 100755 |
||||
--- a/src/pip/_internal/__init__.py |
||||
+++ b/src/pip/_internal/__init__.py |
||||
@@ -16,4 +16,4 @@ def main(args: (Optional[List[str]]) = None) -> int: |
||||
""" |
||||
from pip._internal.utils.entrypoints import _wrapper |
||||
|
||||
- return _wrapper(args) |
||||
+ return _wrapper(args, _nowarn=True) |
||||
diff --git a/src/pip/_internal/utils/entrypoints.py b/src/pip/_internal/utils/entrypoints.py |
||||
index f292c64..2e29a5e 100644 |
||||
--- a/src/pip/_internal/utils/entrypoints.py |
||||
+++ b/src/pip/_internal/utils/entrypoints.py |
||||
@@ -20,7 +20,7 @@ if WINDOWS: |
||||
] |
||||
|
||||
|
||||
-def _wrapper(args: Optional[List[str]] = None) -> int: |
||||
+def _wrapper(args: Optional[List[str]] = None, _nowarn: bool = False) -> int: |
||||
"""Central wrapper for all old entrypoints. |
||||
|
||||
Historically pip has had several entrypoints defined. Because of issues |
||||
@@ -32,14 +32,15 @@ def _wrapper(args: Optional[List[str]] = None) -> int: |
||||
directing them to an appropriate place for help, we now define all of |
||||
our old entrypoints as wrappers for the current one. |
||||
""" |
||||
- sys.stderr.write( |
||||
- "WARNING: pip is being invoked by an old script wrapper. This will " |
||||
- "fail in a future version of pip.\n" |
||||
- "Please see https://github.com/pypa/pip/issues/5599 for advice on " |
||||
- "fixing the underlying issue.\n" |
||||
- "To avoid this problem you can invoke Python with '-m pip' instead of " |
||||
- "running pip directly.\n" |
||||
- ) |
||||
+ if not _nowarn: |
||||
+ sys.stderr.write( |
||||
+ "WARNING: pip is being invoked by an old script wrapper. This will " |
||||
+ "fail in a future version of pip.\n" |
||||
+ "Please see https://github.com/pypa/pip/issues/5599 for advice on " |
||||
+ "fixing the underlying issue.\n" |
||||
+ "To avoid this problem you can invoke Python with '-m pip' instead of " |
||||
+ "running pip directly.\n" |
||||
+ ) |
||||
return main(args) |
||||
|
||||
|
||||
diff --git a/tests/functional/test_cli.py b/tests/functional/test_cli.py |
||||
index 3e85703..f86c392 100644 |
||||
--- a/tests/functional/test_cli.py |
||||
+++ b/tests/functional/test_cli.py |
||||
@@ -43,4 +43,5 @@ def test_entrypoints_work(entrypoint: str, script: PipTestEnvironment) -> None: |
||||
result = script.pip("-V") |
||||
result2 = script.run("fake_pip", "-V", allow_stderr_warning=True) |
||||
assert result.stdout == result2.stdout |
||||
- assert "old script wrapper" in result2.stderr |
||||
+ if entrypoint[0] != "fake_pip = pip._internal:main": |
||||
+ assert "old script wrapper" in result2.stderr |
||||
-- |
||||
2.35.3 |
||||
|
@ -0,0 +1,27 @@
@@ -0,0 +1,27 @@
|
||||
--- /usr/bin/pip3 2019-11-12 17:37:34.793131862 +0100 |
||||
+++ pip3 2019-11-12 17:40:42.014107134 +0100 |
||||
@@ -2,7 +2,23 @@ |
||||
# -*- coding: utf-8 -*- |
||||
import re |
||||
import sys |
||||
-from pip._internal.cli.main import main |
||||
+ |
||||
+try: |
||||
+ from pip._internal.cli.main import main |
||||
+except ImportError: |
||||
+ try: |
||||
+ from pip._internal.main import main |
||||
+ except ImportError: |
||||
+ try: |
||||
+ # If the user has downgraded pip, the above import will fail. |
||||
+ # Let's try older methods of invoking it: |
||||
+ |
||||
+ # pip 19 uses this |
||||
+ from pip._internal import main |
||||
+ except ImportError: |
||||
+ # older pip versions use this |
||||
+ from pip import main |
||||
+ |
||||
if __name__ == '__main__': |
||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) |
||||
sys.exit(main()) |
@ -0,0 +1,115 @@
@@ -0,0 +1,115 @@
|
||||
From 2c3f3a590ddfc151a456b44a5f96f0f603d178e9 Mon Sep 17 00:00:00 2001 |
||||
From: Lumir Balhar <lbalhar@redhat.com> |
||||
Date: Wed, 16 Feb 2022 08:36:21 +0100 |
||||
Subject: [PATCH] Prevent removing of the system packages installed under |
||||
/usr/lib when pip install --upgrade is executed. |
||||
MIME-Version: 1.0 |
||||
Content-Type: text/plain; charset=UTF-8 |
||||
Content-Transfer-Encoding: 8bit |
||||
|
||||
Resolves: rhbz#1550368 |
||||
|
||||
Co-Authored-By: Michal Cyprian <m.cyprian@gmail.com> |
||||
Co-Authored-By: Victor Stinner <vstinner@redhat.com> |
||||
Co-Authored-By: Petr Viktorin <pviktori@redhat.com> |
||||
Co-Authored-By: Lumir Balhar <lbalhar@redhat.com> |
||||
Co-Authored-By: Miro Hrončok <miro@hroncok.cz> |
||||
Co-Authored-By: Karolina Surma <ksurma@redhat.com> |
||||
--- |
||||
src/pip/_internal/metadata/base.py | 12 +++++++++++- |
||||
src/pip/_internal/req/req_install.py | 2 +- |
||||
src/pip/_internal/resolution/legacy/resolver.py | 4 +++- |
||||
src/pip/_internal/resolution/resolvelib/factory.py | 12 ++++++++++++ |
||||
4 files changed, 27 insertions(+), 3 deletions(-) |
||||
|
||||
diff --git a/src/pip/_internal/metadata/base.py b/src/pip/_internal/metadata/base.py |
||||
index 151fd6d..f9109cd 100644 |
||||
--- a/src/pip/_internal/metadata/base.py |
||||
+++ b/src/pip/_internal/metadata/base.py |
||||
@@ -28,7 +28,7 @@ from pip._vendor.packaging.utils import NormalizedName |
||||
from pip._vendor.packaging.version import LegacyVersion, Version |
||||
|
||||
from pip._internal.exceptions import NoneMetadataError |
||||
-from pip._internal.locations import site_packages, user_site |
||||
+from pip._internal.locations import get_scheme, site_packages, user_site |
||||
from pip._internal.models.direct_url import ( |
||||
DIRECT_URL_METADATA_NAME, |
||||
DirectUrl, |
||||
@@ -560,6 +560,16 @@ class BaseDistribution(Protocol): |
||||
for extra in self._iter_egg_info_extras(): |
||||
metadata["Provides-Extra"] = extra |
||||
|
||||
+ @property |
||||
+ def in_install_path(self) -> bool: |
||||
+ """ |
||||
+ Return True if given Distribution is installed in |
||||
+ path matching distutils_scheme layout. |
||||
+ """ |
||||
+ norm_path = normalize_path(self.installed_location) |
||||
+ return norm_path.startswith(normalize_path( |
||||
+ get_scheme("").purelib.split('python')[0])) |
||||
+ |
||||
|
||||
class BaseEnvironment: |
||||
"""An environment containing distributions to introspect.""" |
||||
diff --git a/src/pip/_internal/req/req_install.py b/src/pip/_internal/req/req_install.py |
||||
index a1e376c..ed7facf 100644 |
||||
--- a/src/pip/_internal/req/req_install.py |
||||
+++ b/src/pip/_internal/req/req_install.py |
||||
@@ -416,7 +416,7 @@ class InstallRequirement: |
||||
f"lack sys.path precedence to {existing_dist.raw_name} " |
||||
f"in {existing_dist.location}" |
||||
) |
||||
- else: |
||||
+ elif existing_dist.in_install_path: |
||||
self.should_reinstall = True |
||||
else: |
||||
if self.editable: |
||||
diff --git a/src/pip/_internal/resolution/legacy/resolver.py b/src/pip/_internal/resolution/legacy/resolver.py |
||||
index fb49d41..040f2c1 100644 |
||||
--- a/src/pip/_internal/resolution/legacy/resolver.py |
||||
+++ b/src/pip/_internal/resolution/legacy/resolver.py |
||||
@@ -325,7 +325,9 @@ class Resolver(BaseResolver): |
||||
""" |
||||
# Don't uninstall the conflict if doing a user install and the |
||||
# conflict is not a user install. |
||||
- if not self.use_user_site or req.satisfied_by.in_usersite: |
||||
+ if ((not self.use_user_site |
||||
+ or req.satisfied_by.in_usersite) |
||||
+ and req.satisfied_by.in_install_path): |
||||
req.should_reinstall = True |
||||
req.satisfied_by = None |
||||
|
||||
diff --git a/src/pip/_internal/resolution/resolvelib/factory.py b/src/pip/_internal/resolution/resolvelib/factory.py |
||||
index a4c24b5..e7e2da9 100644 |
||||
--- a/src/pip/_internal/resolution/resolvelib/factory.py |
||||
+++ b/src/pip/_internal/resolution/resolvelib/factory.py |
||||
@@ -1,6 +1,8 @@ |
||||
import contextlib |
||||
import functools |
||||
import logging |
||||
+import sys |
||||
+import sysconfig |
||||
from typing import ( |
||||
TYPE_CHECKING, |
||||
Dict, |
||||
@@ -549,6 +551,16 @@ class Factory: |
||||
if dist is None: # Not installed, no uninstallation required. |
||||
return None |
||||
|
||||
+ # Prevent uninstalling packages from /usr |
||||
+ try: |
||||
+ if dist.installed_location in ( |
||||
+ sysconfig.get_path('purelib', scheme='posix_prefix', vars={'base': sys.base_prefix}), |
||||
+ sysconfig.get_path('platlib', scheme='posix_prefix', vars={'platbase': sys.base_prefix}), |
||||
+ ): |
||||
+ return None |
||||
+ except KeyError: # this Python doesn't have 'rpm_prefix' scheme yet |
||||
+ pass |
||||
+ |
||||
# We're installing into global site. The current installation must |
||||
# be uninstalled, no matter it's in global or user site, because the |
||||
# user site installation has precedence over global. |
||||
-- |
||||
2.35.3 |
||||
|
@ -0,0 +1,176 @@
@@ -0,0 +1,176 @@
|
||||
%global srcname pip |
||||
%global base_version 23.0.1 |
||||
%global upstream_version %{base_version}%{?prerel} |
||||
%global python_wheel_name %{srcname}-%{upstream_version}-py3-none-any.whl |
||||
%global bashcompdir %(pkg-config --variable=completionsdir bash-completion 2>/dev/null) |
||||
|
||||
Name: python2-%{srcname} |
||||
Version: %{base_version}%{?prerel:~%{prerel}} |
||||
Release: 1%{?dist} |
||||
Summary: A tool for installing and managing Python packages |
||||
License: MIT AND Python-2.0.1 AND Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND LGPL-2.1-only AND MPL-2.0 AND (Apache-2.0 OR BSD-2-Clause) |
||||
URL: https://pip.pypa.io/ |
||||
Source0: https://github.com/pypa/pip/archive/%{upstream_version}/%{srcname}-%{upstream_version}.tar.gz |
||||
BuildArch: noarch |
||||
Patch: remove-existing-dist-only-if-path-conflicts.patch |
||||
Patch: dummy-certifi.patch |
||||
Patch: nowarn-pip._internal.main.patch |
||||
Patch: no-version-warning.patch |
||||
Patch: https://github.com/pypa/pip/pull/11883.patch |
||||
Patch: https://github.com/pypa/pip/pull/11904.patch |
||||
Source10: pip-allow-different-versions.patch |
||||
|
||||
|
||||
%description |
||||
pip is a package management system used to install and manage software packages |
||||
written in Python. Many packages can be found in the Python Package Index |
||||
(PyPI). pip is a recursive acronym that can stand for either "Pip Installs |
||||
Packages" or "Pip Installs Python". |
||||
|
||||
|
||||
%global bundled() %{expand: |
||||
Provides: bundled(python%{1}dist(cachecontrol)) = 0.12.11 |
||||
Provides: bundled(python%{1}dist(certifi)) = 2022.12.7 |
||||
Provides: bundled(python%{1}dist(chardet)) = 5.1 |
||||
Provides: bundled(python%{1}dist(colorama)) = 0.4.6 |
||||
Provides: bundled(python%{1}dist(distlib)) = 0.3.6 |
||||
Provides: bundled(python%{1}dist(distro)) = 1.8 |
||||
Provides: bundled(python%{1}dist(idna)) = 3.4 |
||||
Provides: bundled(python%{1}dist(msgpack)) = 1.0.4 |
||||
Provides: bundled(python%{1}dist(packaging)) = 21.3 |
||||
Provides: bundled(python%{1}dist(platformdirs)) = 2.6.2 |
||||
Provides: bundled(python%{1}dist(pygments)) = 2.13 |
||||
Provides: bundled(python%{1}dist(pyparsing)) = 3.0.9 |
||||
Provides: bundled(python%{1}dist(pyproject-hooks)) = 1 |
||||
Provides: bundled(python%{1}dist(requests)) = 2.28.2 |
||||
Provides: bundled(python%{1}dist(resolvelib)) = 0.8.1 |
||||
Provides: bundled(python%{1}dist(rich)) = 12.6 |
||||
Provides: bundled(python%{1}dist(setuptools)) = 44 |
||||
Provides: bundled(python%{1}dist(six)) = 1.16 |
||||
Provides: bundled(python%{1}dist(tenacity)) = 8.1 |
||||
Provides: bundled(python%{1}dist(tomli)) = 2.0.1 |
||||
Provides: bundled(python%{1}dist(typing-extensions)) = 4.4 |
||||
Provides: bundled(python%{1}dist(urllib3)) = 1.26.14 |
||||
Provides: bundled(python%{1}dist(webencodings)) = 0.5.1 |
||||
} |
||||
%global crypt_compat_recommends() %{expand: |
||||
Recommends: (libcrypt.so.1()(64bit) if python%{1}(x86-64)) |
||||
Recommends: (libcrypt.so.1 if python%{1}(x86-32)) |
||||
} |
||||
|
||||
|
||||
%package -n python2-%{srcname} |
||||
Summary: A tool for installing and managing Python3 packages |
||||
BuildRequires: python2-devel |
||||
BuildRequires: python2-rpm-generators |
||||
BuildRequires: python2-setuptools |
||||
BuildRequires: bash-completion |
||||
BuildRequires: python2-wheel |
||||
BuildRequires: ca-certificates |
||||
Requires: ca-certificates |
||||
Recommends: python2-setuptools |
||||
%{bundled 2} |
||||
Provides: pip = %{version}-%{release} |
||||
Conflicts: python2-pip < %{version}-%{release} |
||||
Requires: python2-libs >= 2.7 |
||||
%{crypt_compat_recommends 2} |
||||
%description -n python2-%{srcname} |
||||
pip is a package management system used to install and manage software packages |
||||
written in Python. Many packages can be found in the Python Package Index |
||||
(PyPI). pip is a recursive acronym that can stand for either "Pip Installs |
||||
Packages" or "Pip Installs Python". |
||||
|
||||
%package -n %{python_wheel_pkg_prefix}-%{srcname}-wheel |
||||
Summary: The pip wheel |
||||
Requires: ca-certificates |
||||
|
||||
# Virtual provides for the packages bundled by pip: |
||||
%{bundled 2} |
||||
|
||||
%{crypt_compat_recommends 2} |
||||
|
||||
%description -n %{python_wheel_pkg_prefix}-%{srcname}-wheel |
||||
A Python wheel of pip to use with venv. |
||||
|
||||
|
||||
%prep |
||||
%autosetup -p1 -n %{srcname}-%{upstream_version} |
||||
# this goes together with patch4 |
||||
rm src/pip/_vendor/certifi/*.pem |
||||
# Do not use furo as HTML theme in docs |
||||
# furo is not available in Fedora |
||||
sed -i '/html_theme = "furo"/d' docs/html/conf.py |
||||
# towncrier extension for Sphinx is not yet available in Fedora |
||||
sed -i '/"sphinxcontrib.towncrier",/d' docs/html/conf.py |
||||
# tests expect wheels in here |
||||
ln -s %{python_wheel_dir} tests/data/common_wheels |
||||
# Remove windows executable binaries |
||||
rm -v src/pip/_vendor/distlib/*.exe |
||||
sed -i '/\.exe/d' setup.py |
||||
|
||||
|
||||
%build |
||||
%py2_build_wheel |
||||
|
||||
|
||||
%install |
||||
%{python2} dist/%{python_wheel_name}/pip install \ |
||||
--root %{buildroot} \ |
||||
--no-deps \ |
||||
--disable-pip-version-check \ |
||||
--progress-bar off \ |
||||
--verbose \ |
||||
--ignore-installed \ |
||||
--no-warn-script-location \ |
||||
--no-index \ |
||||
--no-cache-dir \ |
||||
--find-links dist \ |
||||
'pip==%{upstream_version}' |
||||
|
||||
for PIP in %{buildroot}%{_bindir}/pip*; do |
||||
patch -p1 --no-backup-if-mismatch $PIP < %{SOURCE10} |
||||
done |
||||
|
||||
mkdir -p %{buildroot}%{bashcompdir} |
||||
PYTHONPATH=%{buildroot}%{python3_sitelib} \ |
||||
%{buildroot}%{_bindir}/pip completion --bash \ |
||||
> %{buildroot}%{bashcompdir}/pip3 |
||||
|
||||
sed -i -e "s/^\\(complete.*\\) pip\$/\\1 pip pip{,-}{3,%{python3_version}}/" \ |
||||
-e s/_pip_completion/_pip3_completion/ \ |
||||
%{buildroot}%{bashcompdir}/pip3 |
||||
|
||||
ln -s ./pip2 %{buildroot}%{_bindir}/pip-2 |
||||
ln -s ./pip-2 %{buildroot}%{_bindir}/pip-2 |
||||
|
||||
|
||||
# Make sure the INSTALLER is not pip and remove RECORD |
||||
# %%pyproject macros do this for all packages |
||||
echo rpm > %{buildroot}%{python3_sitelib}/pip-%{upstream_version}.dist-info/INSTALLER |
||||
rm %{buildroot}%{python3_sitelib}/pip-%{upstream_version}.dist-info/RECORD |
||||
|
||||
mkdir -p %{buildroot}%{python_wheel_dir} |
||||
install -p dist/%{python_wheel_name} -t %{buildroot}%{python_wheel_dir} |
||||
|
||||
|
||||
%files -n python2-%{srcname} |
||||
%doc README.rst |
||||
%license %{python3_sitelib}/pip-%{upstream_version}.dist-info/LICENSE.txt |
||||
%{_bindir}/pip |
||||
%{_bindir}/pip2 |
||||
%{_bindir}/pip-2 |
||||
%{_bindir}/pip2.7 |
||||
%{_bindir}/pip-2.7 |
||||
%{python2_sitelib}/pip* |
||||
%dir %{bashcompdir} |
||||
%{bashcompdir}/pip2 |
||||
|
||||
|
||||
%files -n %{python_wheel_pkg_prefix}-%{srcname}-wheel |
||||
%license LICENSE.txt |
||||
# we own the dir for simplicity |
||||
%dir %{python_wheel_dir}/ |
||||
%{python_wheel_dir}/%{python_wheel_name} |
||||
|
||||
|
||||
%changelog |
Loading…
Reference in new issue