diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a3caa7a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/pip-9.0.3.tar.gz
diff --git a/.python-pip.metadata b/.python-pip.metadata
new file mode 100644
index 0000000..3bc8f51
--- /dev/null
+++ b/.python-pip.metadata
@@ -0,0 +1 @@
+1f5f44d433ca599d40f8e46f440479b2c73802d8 SOURCES/pip-9.0.3.tar.gz
diff --git a/SOURCES/allow-stripping-given-prefix-from-wheel-RECORD-files.patch b/SOURCES/allow-stripping-given-prefix-from-wheel-RECORD-files.patch
new file mode 100644
index 0000000..d66b250
--- /dev/null
+++ b/SOURCES/allow-stripping-given-prefix-from-wheel-RECORD-files.patch
@@ -0,0 +1,95 @@
+diff -up pip-9.0.1/pip/commands/install.py.orig pip-9.0.1/pip/commands/install.py
+--- pip-9.0.1/pip/commands/install.py.orig	2016-11-06 11:49:45.000000000 -0700
++++ pip-9.0.1/pip/commands/install.py	2016-11-16 16:20:48.638906543 -0700
+@@ -151,6 +151,14 @@ class InstallCommand(RequirementCommand)
+                  "directory.")
+ 
+         cmd_opts.add_option(
++            '--strip-file-prefix',
++            dest='strip_file_prefix',
++            metavar='prefix',
++            default=None,
++            help="Strip given prefix from script paths in wheel RECORD."
++        )
++
++        cmd_opts.add_option(
+             '--prefix',
+             dest='prefix_path',
+             metavar='dir',
+@@ -340,6 +348,7 @@ class InstallCommand(RequirementCommand)
+                             global_options,
+                             root=options.root_path,
+                             prefix=options.prefix_path,
++                            strip_file_prefix=options.strip_file_prefix,
+                         )
+ 
+                         possible_lib_locations = get_lib_location_guesses(
+diff -up pip-9.0.1/pip/req/req_install.py.orig pip-9.0.1/pip/req/req_install.py
+--- pip-9.0.1/pip/req/req_install.py.orig	2016-11-06 11:49:45.000000000 -0700
++++ pip-9.0.1/pip/req/req_install.py	2016-11-16 16:19:24.848336960 -0700
+@@ -838,8 +838,7 @@ class InstallRequirement(object):
+         else:
+             return True
+ 
+-    def install(self, install_options, global_options=[], root=None,
+-                prefix=None):
++    def install(self, install_options, global_options=[], root=None, prefix=None, strip_file_prefix=None):
+         if self.editable:
+             self.install_editable(
+                 install_options, global_options, prefix=prefix)
+@@ -848,7 +847,12 @@ class InstallRequirement(object):
+             version = pip.wheel.wheel_version(self.source_dir)
+             pip.wheel.check_compatibility(version, self.name)
+ 
+-            self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
++            self.move_wheel_files(
++                self.source_dir,
++                root=root,
++                prefix=prefix,
++                strip_file_prefix=strip_file_prefix
++            )
+             self.install_succeeded = True
+             return
+ 
+@@ -1053,7 +1057,7 @@ class InstallRequirement(object):
+     def is_wheel(self):
+         return self.link and self.link.is_wheel
+ 
+-    def move_wheel_files(self, wheeldir, root=None, prefix=None):
++    def move_wheel_files(self, wheeldir, root=None, prefix=None, strip_file_prefix=None):
+         move_wheel_files(
+             self.name, self.req, wheeldir,
+             user=self.use_user_site,
+@@ -1062,6 +1066,7 @@ class InstallRequirement(object):
+             prefix=prefix,
+             pycompile=self.pycompile,
+             isolated=self.isolated,
++            strip_file_prefix=strip_file_prefix,
+         )
+ 
+     def get_dist(self):
+diff -up pip-9.0.1/pip/wheel.py.orig pip-9.0.1/pip/wheel.py
+--- pip-9.0.1/pip/wheel.py.orig	2016-11-06 11:49:45.000000000 -0700
++++ pip-9.0.1/pip/wheel.py	2016-11-16 16:19:24.848336960 -0700
+@@ -238,7 +238,7 @@ def get_entrypoints(filename):
+ 
+ 
+ def move_wheel_files(name, req, wheeldir, user=False, home=None, root=None,
+-                     pycompile=True, scheme=None, isolated=False, prefix=None):
++                     pycompile=True, scheme=None, isolated=False, prefix=None, strip_file_prefix=None):
+     """Install a wheel"""
+ 
+     if not scheme:
+@@ -521,7 +521,11 @@ if __name__ == '__main__':
+                 writer.writerow(row)
+             for f in generated:
+                 h, l = rehash(f)
+-                writer.writerow((normpath(f, lib_dir), h, l))
++                final_path = normpath(f, lib_dir)
++                if strip_file_prefix and final_path.startswith(strip_file_prefix):
++                    final_path = os.path.join(os.sep,
++                            os.path.relpath(final_path, strip_file_prefix))
++                writer.writerow((final_path, h, l))
+             for f in installed:
+                 writer.writerow((installed[f], '', ''))
+     shutil.move(temp_record, record)
diff --git a/SOURCES/dummy-certifi.patch b/SOURCES/dummy-certifi.patch
new file mode 100644
index 0000000..f6a9f35
--- /dev/null
+++ b/SOURCES/dummy-certifi.patch
@@ -0,0 +1,15 @@
+diff --git a/pip/_vendor/certifi/core.py b/pip/_vendor/certifi/core.py
+index eab9d1d..9614a88 100644
+--- a/pip/_vendor/certifi/core.py
++++ b/pip/_vendor/certifi/core.py
+@@ -19,9 +19,7 @@ class DeprecatedBundleWarning(DeprecationWarning):
+ 
+ 
+ def where():
+-    f = os.path.dirname(__file__)
+-
+-    return os.path.join(f, 'cacert.pem')
++    return '/etc/pki/tls/certs/ca-bundle.crt'
+ 
+ 
+ def old_where():
diff --git a/SOURCES/emit-a-warning-when-running-with-root-privileges.patch b/SOURCES/emit-a-warning-when-running-with-root-privileges.patch
new file mode 100644
index 0000000..644fce9
--- /dev/null
+++ b/SOURCES/emit-a-warning-when-running-with-root-privileges.patch
@@ -0,0 +1,44 @@
+From 18a617e9e0f64b727938422d4f941dfddfbf5d00 Mon Sep 17 00:00:00 2001
+From: Tomas Orsava <torsava@redhat.com>
+Date: Tue, 14 Feb 2017 17:10:09 +0100
+Subject: [PATCH] Emit a warning when running with root privileges.
+
+---
+ pip/commands/install.py | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/pip/commands/install.py b/pip/commands/install.py
+index 227c526..277a3d1 100644
+--- a/pip/commands/install.py
++++ b/pip/commands/install.py
+@@ -6,6 +6,8 @@ import os
+ import tempfile
+ import shutil
+ import warnings
++import sys
++from os import path
+ try:
+     import wheel
+ except ImportError:
+@@ -193,6 +195,18 @@ class InstallCommand(RequirementCommand):
+         cmdoptions.resolve_wheel_no_use_binary(options)
+         cmdoptions.check_install_build_global(options)
+ 
++        def is_venv():
++            return hasattr(sys, 'real_prefix') or \
++                    (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix)
++
++        # Check whether we have root privileges and aren't in venv/virtualenv
++        if os.getuid() == 0 and not is_venv():
++            logger.warning(
++                "WARNING: Running pip install with root privileges is "
++                "generally not a good idea. Try `%s install --user` instead."
++                        % path.basename(sys.argv[0])
++            )
++
+         if options.as_egg:
+             warnings.warn(
+                 "--egg has been deprecated and will be removed in the future. "
+-- 
+2.11.0
+
diff --git a/SOURCES/pip-nowarn-upgrade.patch b/SOURCES/pip-nowarn-upgrade.patch
new file mode 100644
index 0000000..9e314a5
--- /dev/null
+++ b/SOURCES/pip-nowarn-upgrade.patch
@@ -0,0 +1,36 @@
+diff --git a/pip/utils/outdated.py b/pip/utils/outdated.py
+index 2164cc3..c71539f 100644
+--- a/pip/utils/outdated.py
++++ b/pip/utils/outdated.py
+@@ -92,6 +92,21 @@ def load_selfcheck_statefile():
+         return GlobalSelfCheckState()
+ 
+ 
++def pip_installed_by_pip():
++    """Checks whether pip was installed by pip
++
++    This is used not to display the upgrade message when pip is in fact
++    installed by system package manager, such as dnf on Fedora.
++    """
++    import pkg_resources
++    try:
++        dist = pkg_resources.get_distribution('pip')
++        return (dist.has_metadata('INSTALLER') and
++                'pip' in dist.get_metadata_lines('INSTALLER'))
++    except pkg_resources.DistributionNotFound:
++        return False
++
++
+ def pip_version_check(session):
+     """Check for an update for pip.
+ 
+@@ -141,7 +156,8 @@ def pip_version_check(session):
+ 
+         # Determine if our pypi_version is older
+         if (pip_version < remote_version and
+-                pip_version.base_version != remote_version.base_version):
++                pip_version.base_version != remote_version.base_version and
++                pip_installed_by_pip()):
+             # Advise "python -m pip" on Windows to avoid issues
+             # with overwriting pip.exe.
+             if WINDOWS:
diff --git a/SOURCES/pip9-allow-pip10-import.patch b/SOURCES/pip9-allow-pip10-import.patch
new file mode 100644
index 0000000..657b7b3
--- /dev/null
+++ b/SOURCES/pip9-allow-pip10-import.patch
@@ -0,0 +1,16 @@
+--- /usr/bin/pip3	2018-03-29 15:22:13.000000000 +0200
++++ pip3	2018-05-04 11:49:08.098821010 +0200
+@@ -4,7 +4,12 @@
+ import re
+ import sys
+ 
+-from pip import main
++try:
++    from pip import main
++except ImportError:
++    # user has most probably upgraded pip in their home
++    # so let them run it anyway until ~/.local/bin makes it in front of the PATH
++    from pip._internal import main
+ 
+ if __name__ == '__main__':
+     sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
diff --git a/SOURCES/remove-existing-dist-only-if-path-conflicts.patch b/SOURCES/remove-existing-dist-only-if-path-conflicts.patch
new file mode 100644
index 0000000..25ff598
--- /dev/null
+++ b/SOURCES/remove-existing-dist-only-if-path-conflicts.patch
@@ -0,0 +1,97 @@
+diff --git a/pip/req/req_install.py b/pip/req/req_install.py
+index 6911fba..8524932 100644
+--- a/pip/req/req_install.py
++++ b/pip/req/req_install.py
+@@ -34,7 +34,7 @@ from pip.locations import (
+ )
+ from pip.utils import (
+     display_path, rmtree, ask_path_exists, backup_dir, is_installable_dir,
+-    dist_in_usersite, dist_in_site_packages, egg_link_path,
++    dist_in_usersite, dist_in_site_packages, dist_in_install_path, egg_link_path,
+     call_subprocess, read_text_file, FakeFile, _make_build_dir, ensure_dir,
+     get_installed_version, normalize_path, dist_is_local,
+ )
+@@ -1049,7 +1049,7 @@ class InstallRequirement(object):
+                         "lack sys.path precedence to %s in %s" %
+                         (existing_dist.project_name, existing_dist.location)
+                     )
+-            else:
++            elif dist_in_install_path(existing_dist):
+                 self.conflicts_with = existing_dist
+         return True
+ 
+diff --git a/pip/req/req_set.py b/pip/req/req_set.py
+index 76aec06..b93304a 100644
+--- a/pip/req/req_set.py
++++ b/pip/req/req_set.py
+@@ -18,7 +18,8 @@ from pip.exceptions import (InstallationError, BestVersionAlreadyInstalled,
+                             UnsupportedPythonVersion)
+ from pip.req.req_install import InstallRequirement
+ from pip.utils import (
+-    display_path, dist_in_usersite, ensure_dir, normalize_path)
++    display_path, dist_in_usersite, dist_in_install_path, ensure_dir,
++    normalize_path)
+ from pip.utils.hashes import MissingHashes
+ from pip.utils.logging import indent_log
+ from pip.utils.packaging import check_dist_requires_python
+@@ -437,10 +438,12 @@ class RequirementSet(object):
+ 
+                 if not best_installed:
+                     # don't uninstall conflict if user install and
+-                    # conflict is not user install
++                    # conflict is not user install or conflict lives
++                    # in a different path (/usr/lib vs /usr/local/lib/)
+                     if not (self.use_user_site and not
+-                            dist_in_usersite(req_to_install.satisfied_by)):
+-                        req_to_install.conflicts_with = \
++                            dist_in_usersite(req_to_install.satisfied_by) or not
++                            dist_in_install_path(req_to_install.satisfied_by)):
++                        req_to_install.conflicts_with = \
+                             req_to_install.satisfied_by
+                     req_to_install.satisfied_by = None
+ 
+@@ -644,10 +647,12 @@ class RequirementSet(object):
+                 if req_to_install.satisfied_by:
+                     if self.upgrade or self.ignore_installed:
+                         # don't uninstall conflict if user install and
+-                        # conflict is not user install
++                        # conflict is not user install or conflict lives
++                        # in a different path (/usr/lib vs /usr/local/lib/)
+                         if not (self.use_user_site and not
+                                 dist_in_usersite(
+-                                    req_to_install.satisfied_by)):
++                                    req_to_install.satisfied_by) or not
++                                dist_in_install_path(req_to_install.satisfied_by)):
+                             req_to_install.conflicts_with = \
+                                 req_to_install.satisfied_by
+                         req_to_install.satisfied_by = None
+diff --git a/pip/utils/__init__.py b/pip/utils/__init__.py
+index 815bd33..0ed59f7 100644
+--- a/pip/utils/__init__.py
++++ b/pip/utils/__init__.py
+@@ -22,7 +22,7 @@ from pip.exceptions import InstallationError
+ from pip.compat import console_to_str, expanduser, stdlib_pkgs
+ from pip.locations import (
+     site_packages, user_site, running_under_virtualenv, virtualenv_no_global,
+-    write_delete_marker_file,
++    write_delete_marker_file, distutils_scheme,
+ )
+ from pip._vendor import pkg_resources
+ from pip._vendor.six.moves import input
+@@ -315,6 +315,16 @@ def dist_in_site_packages(dist):
+     ).startswith(normalize_path(site_packages))
+ 
+ 
++def dist_in_install_path(dist):
++    """
++    Return True if given Distribution is installed in
++    path matching distutils_scheme layout.
++    """
++    norm_path = normalize_path(dist_location(dist))
++    return norm_path.startswith(normalize_path(
++        distutils_scheme("")['purelib'].split('python')[0]))
++
++
+ def dist_is_editable(dist):
+     """Is distribution an editable install?"""
+     for path_item in sys.path:
diff --git a/SPECS/python-pip.spec b/SPECS/python-pip.spec
new file mode 100644
index 0000000..ecd784d
--- /dev/null
+++ b/SPECS/python-pip.spec
@@ -0,0 +1,687 @@
+%bcond_with bootstrap
+%bcond_with tests
+
+# RHEL7: Disabled building of python2, but keeping it in the spec to keep the
+# spec as similar as possible with RHEL8/Fedora
+%bcond_with python2
+%bcond_without python3
+# RHEL7: Disabled building of docs, because we don't ship its build
+# dependencies in RHEL7
+%bcond_with doc
+
+# RHEL7: Due to EPEL the python3_pkgversion is defined as 36, but the actual RHEL7 components will use the python3- prefix
+%global python3_pkgversion 3
+
+%global srcname pip
+%global python_wheelname %{srcname}-%{version}-py2.py3-none-any.whl
+%if %{without bootstrap}
+%if %{with python2}
+%global python2_wheelname %python_wheelname
+%endif
+%if %{with python3}
+%global python3_wheelname %python_wheelname
+%endif
+%endif
+
+# Note that with disabled python3, bashcomp2 will be disabled as well because
+# bashcompdir will point to a different path than with python3 enabled.
+%global bashcompdir %(b=$(pkg-config --variable=completionsdir bash-completion 2>/dev/null); echo ${b:-%{_sysconfdir}/bash_completion.d})
+%if "%{bashcompdir}" != "%{_sysconfdir}/bash_completion.d"
+%global bashcomp2 1
+%endif
+
+Name:           python-%{srcname}
+# When updating, update the bundled libraries versions bellow!
+Version:        9.0.3
+Release:        5%{?dist}
+Summary:        A tool for installing and managing Python packages
+
+Group:          Development/Libraries
+License:        MIT and Python and ASL 2.0 and BSD and ISC and LGPLv2 and MPLv2.0 and (ASL 2.0 or BSD)
+URL:            http://www.pip-installer.org
+Source0:        https://files.pythonhosted.org/packages/source/p/%{srcname}/%{srcname}-%{version}.tar.gz
+
+BuildArch:      noarch
+
+
+# Workaround for rhbz#1691402:
+# Define __python to be /usr/bin/python3 so that brp-python-bytecompile uses it
+# as the default_python, and doesn't exit bytecompilation when it doesn't find
+# /usr/bin/python, which is not installed
+%global __python %{__python3}
+
+
+%if %{with tests}
+BuildRequires:  git
+BuildRequires:  bzr
+%endif
+
+# to get tests:
+# git clone https://github.com/pypa/pip && cd pip
+# git checkout 9.0.3 && tar -czvf ../pip-9.0.3-tests.tar.gz tests/
+%if %{with tests}
+Source1:        pip-9.0.3-tests.tar.gz
+%endif
+
+# Patch until the following issue gets implemented upstream:
+# https://github.com/pypa/pip/issues/1351
+Patch0:         allow-stripping-given-prefix-from-wheel-RECORD-files.patch
+
+# Downstream only patch
+# Emit a warning to the user if pip install is run with root privileges
+# Issue upstream: https://github.com/pypa/pip/issues/4288
+Patch1:         emit-a-warning-when-running-with-root-privileges.patch
+
+
+# WIP upstream patch https://github.com/pypa/pip/issues/5346
+# https://bugzilla.redhat.com/show_bug.cgi?id=1573755
+Patch2:         pip-nowarn-upgrade.patch
+
+# Prevent removing of the system packages installed under /usr/lib
+# when pip install -U is executed.
+# https://bugzilla.redhat.com/show_bug.cgi?id=1550368#c24
+Patch3:         remove-existing-dist-only-if-path-conflicts.patch
+
+# Use the system level root certificate instead of the one bundled in certifi
+# https://bugzilla.redhat.com/show_bug.cgi?id=1655253
+Patch4:         dummy-certifi.patch
+
+# Downstream only patch
+# Users are upgrading pip9 to pip10 by various manners,
+# one of them is `pip install --user --upgrade pip`.
+# If they do that and they run `pip` or  `pip3`, the one from /usr/bin is used.
+# However that's the one from this RPM package (pip9) and the import in there
+# fails (it tries to import from ~/.local, but pip10 is there with a bit
+# different API).
+# We add this patch as a dirty workaround to make /usr/bin/pip* work with
+# both pip9 (from this RPM) and pip10 (from whatever).
+# A proper fix is to put ~/.local/bin in front of /usr/bin in the PATH,
+# however others are against that and we cannot change it for existing
+# installs/user homes anyway.
+# https://bugzilla.redhat.com/show_bug.cgi?id=1569488
+# https://bugzilla.redhat.com/show_bug.cgi?id=1571650
+# WARNING: /usr/bin/pip* are entrypoints, this cannot be applied in %%prep!
+# %%patch10 doesn't work outside of %%prep, so we add it as a source
+Source10:        pip9-allow-pip10-import.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".
+
+
+%if %{with python2}
+%package -n python2-%{srcname}
+Summary:        A tool for installing and managing Python 2 packages
+Group:          Development/Libraries
+BuildRequires:  python2-devel
+BuildRequires:  python2-setuptools
+%if %{with tests}
+BuildRequires:  python2-mock
+BuildRequires:  python2-pytest
+BuildRequires:  python2-pretend
+BuildRequires:  python2-freezegun
+BuildRequires:  python2-pytest-capturelog
+BuildRequires:  python2-scripttest
+BuildRequires:  python2-virtualenv
+%endif
+%if %{without bootstrap}
+BuildRequires:  python2-pip
+BuildRequires:  python2-wheel
+%endif
+Requires:       python2-setuptools
+
+# Virtual provides for the packages bundled by pip.
+# You can find the versions in pip/_vendor/vendor.txt file.
+# Don't forget to update this bellow for python3 as well.
+Provides: bundled(python2dist(appdirs)) = 1.4.0
+Provides: bundled(python2dist(cachecontrol)) = 0.11.7
+Provides: bundled(python2dist(colorama)) = 0.3.7
+Provides: bundled(python2dist(distlib)) = 0.2.4
+Provides: bundled(python2dist(distro)) = 1.0.1
+Provides: bundled(python2dist(html5lib)) = 1.0b10
+Provides: bundled(python2dist(ipaddress) = 1.0.17
+Provides: bundled(python2dist(lockfile)) = 0.12.2
+Provides: bundled(python2dist(packaging)) = 16.8
+Provides: bundled(python2dist(setuptools)) = 28.8.0
+Provides: bundled(python2dist(progress)) = 1.2
+Provides: bundled(python2dist(pyparsing)) = 2.1.10
+Provides: bundled(python2dist(requests)) = 2.11.1
+Provides: bundled(python2dist(retrying)) = 1.3.3
+Provides: bundled(python2dist(six)) = 1.10.0
+Provides: bundled(python2dist(webencodings)) = 0.5
+
+# Bundled within the requests bundle
+Provides: bundled(python2dist(chardet)) = 2.3.0
+Provides: bundled(python2dist(urllib3)) = 1.16
+
+%{?python_provide:%python_provide python2-%{srcname}}
+
+%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".
+
+%endif # with python2
+
+
+%if %{with python3}
+%package -n python%{python3_pkgversion}-%{srcname}
+Summary:        A tool for installing and managing Python3 packages
+Group:          Development/Libraries
+
+BuildRequires:  python%{python3_pkgversion}-devel
+# RHEL7: python-pip is rebuilt before the final build of python3, which
+# adds the dependency on python3-rpm-generators, so we require it manually.
+BuildRequires:  python%{python3_pkgversion}-rpm-generators
+BuildRequires:  python%{python3_pkgversion}-setuptools
+BuildRequires:  bash-completion
+%if %{with tests}
+BuildRequires:  python%{python3_pkgversion}-mock
+BuildRequires:  python%{python3_pkgversion}-pytest
+BuildRequires:  python%{python3_pkgversion}-pretend
+BuildRequires:  python%{python3_pkgversion}-freezegun
+BuildRequires:  python%{python3_pkgversion}-pytest-capturelog
+BuildRequires:  python%{python3_pkgversion}-scripttest
+BuildRequires:  python%{python3_pkgversion}-virtualenv
+%endif
+%if %{without bootstrap}
+BuildRequires:  python%{python3_pkgversion}-pip
+BuildRequires:  python%{python3_pkgversion}-wheel
+%endif
+Requires:  python%{python3_pkgversion}-setuptools
+
+# Virtual provides for the packages bundled by pip.
+# See the python2 list above for instructions.
+Provides: bundled(python3dist(appdirs)) = 1.4.0
+Provides: bundled(python3dist(cachecontrol)) = 0.11.7
+Provides: bundled(python3dist(colorama)) = 0.3.7
+Provides: bundled(python3dist(distlib)) = 0.2.4
+Provides: bundled(python3dist(distro)) = 1.0.1
+Provides: bundled(python3dist(html5lib)) = 1.0b10
+Provides: bundled(python3dist(ipaddress) = 1.0.17
+Provides: bundled(python3dist(lockfile)) = 0.12.2
+Provides: bundled(python3dist(packaging)) = 16.8
+Provides: bundled(python3dist(setuptools)) = 28.8.0
+Provides: bundled(python3dist(progress)) = 1.2
+Provides: bundled(python3dist(pyparsing)) = 2.1.10
+Provides: bundled(python3dist(requests)) = 2.11.1
+Provides: bundled(python3dist(retrying)) = 1.3.3
+Provides: bundled(python3dist(six)) = 1.10.0
+Provides: bundled(python3dist(webencodings)) = 0.5
+
+# Bundled within the requests bundle
+Provides: bundled(python3dist(chardet)) = 2.3.0
+Provides: bundled(python3dist(urllib3)) = 1.16
+
+%{?python_provide:%python_provide python%{python3_pkgversion}-%{srcname}}
+
+# We're replacing the functionality of the python36 packages from EPEL
+Provides: python36-pip = %{version}-%{release}
+Obsoletes: python36-pip < %{version}-%{release}
+
+%description -n python%{python3_pkgversion}-%{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".
+
+%if %{with doc}
+%package doc
+Summary:        A documentation for a tool for installing and managing Python packages
+
+BuildRequires:  python%{python3_pkgversion}-sphinx
+
+%description doc
+A documentation for a tool for installing and managing Python packages
+
+%endif
+
+%endif # with python3
+
+
+%prep
+%if %{with doc} && %{without python3}
+echo "This combination (with doc, without python3) is unsupported"
+exit 1
+%endif
+
+%setup -q -n %{srcname}-%{version}
+%if %{with tests}
+tar -xf %{SOURCE1}
+%endif
+
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+
+# this goes together with patch4
+rm pip/_vendor/certifi/*.pem
+sed -i '/\.pem$/d' pip.egg-info/SOURCES.txt
+
+sed -i '1d' pip/__init__.py
+
+# Remove ordereddict as it is only required for python <= 2.6
+rm pip/_vendor/ordereddict.py
+
+
+%build
+%if %{with python2}
+%if %{without bootstrap}
+%py2_build_wheel
+%else
+%py2_build
+%endif
+%endif # with python2
+
+%if %{with python3}
+%if %{without bootstrap}
+%py3_build_wheel
+%else
+%py3_build
+%endif
+%endif # with python3
+
+%if %{with doc}
+pushd docs
+make html
+make man
+rm _build/html/.buildinfo
+popd
+%endif
+
+
+%install
+%if %{with python3}
+%if %{without bootstrap}
+%py3_install_wheel %{python3_wheelname}
+%else
+%py3_install
+%endif
+
+# TODO: we have to remove this by hand now, but it'd be nice if we wouldn't have to
+# (pip install wheel doesn't overwrite)
+rm %{buildroot}%{_bindir}/pip
+%endif # with python3
+
+%if %{with doc}
+install -d %{buildroot}%{_mandir}/man1
+%if %{with python2}
+install -pm0644 docs/_build/man/*.1 %{buildroot}%{_mandir}/man1/pip.1
+install -pm0644 docs/_build/man/*.1 %{buildroot}%{_mandir}/man1/pip2.1
+%endif
+%if %{with python3}
+install -pm0644 docs/_build/man/*.1 %{buildroot}%{_mandir}/man1/pip3.1
+%endif
+%endif # with doc
+
+%if %{with python2}
+%if %{without bootstrap}
+%py2_install_wheel %{python2_wheelname}
+%else
+%py2_install
+%endif
+%endif # with python2
+
+# before we ln -s anything, we apply Source10 patch to all pips:
+# we don't do this when bootstrapping because the entrypoints look different
+# this is not worth dealing with because we'll rebuild once more anyway
+%if %{without bootstrap}
+for PIP in %{buildroot}%{_bindir}/pip*; do
+  patch -p1 $PIP < %{SOURCE10}
+done
+%endif # without bootstrap
+
+mkdir -p %{buildroot}%{bashcompdir}
+%if %{with python2}
+PYTHONPATH=%{buildroot}%{python2_sitelib} \
+    %{buildroot}%{_bindir}/pip completion --bash \
+    > %{buildroot}%{bashcompdir}/pip
+%endif
+%if %{with python3}
+PYTHONPATH=%{buildroot}%{python3_sitelib} \
+    %{buildroot}%{_bindir}/pip3 completion --bash \
+    > %{buildroot}%{bashcompdir}/pip3
+%endif
+pips2=pip
+pips3=pip3
+for pip in %{buildroot}%{_bindir}/pip*; do
+    pip=$(basename $pip)
+    case $pip in
+%if %{with python2}
+        pip2*)
+            pips2="$pips2 $pip"
+%if 0%{?bashcomp2}
+            ln -s pip %{buildroot}%{bashcompdir}/$pip
+%endif
+            ;;
+%endif
+%if %{with python3}
+        pip3?*)
+            pips3="$pips3 $pip"
+%if 0%{?bashcomp2}
+            ln -s pip3 %{buildroot}%{bashcompdir}/$pip
+%endif
+            ;;
+%endif
+    esac
+done
+%if %{with python3}
+sed -i -e "s/^\\(complete.*\\) pip\$/\\1 $pips3/" \
+    -e s/_pip_completion/_pip3_completion/ \
+    %{buildroot}%{bashcompdir}/pip3
+%endif
+%if %{with python2}
+sed -i -e "s/^\\(complete.*\\) pip\$/\\1 $pips2/" \
+    %{buildroot}%{bashcompdir}/pip
+%endif
+
+# Provide symlinks to executables to comply with Fedora guidelines for Python
+%if %{with python2}
+ln -s ./pip%{python2_version} %{buildroot}%{_bindir}/pip-%{python2_version}
+ln -s ./pip-%{python2_version} %{buildroot}%{_bindir}/pip-2
+%endif
+%if %{with python3}
+ln -s ./pip%{python3_version} %{buildroot}%{_bindir}/pip-%{python3_version}
+ln -s ./pip-%{python3_version} %{buildroot}%{_bindir}/pip-3
+%endif
+
+
+# Make sure the INSTALLER is not pip, otherwise Patch2 won't work
+# TODO Maybe we should make all our python packages have this?
+%if %{without bootstrap}
+%if %{with python2}
+echo rpm > %{buildroot}%{python2_sitelib}/pip-%{version}.dist-info/INSTALLER
+%endif
+%if %{with python3}
+echo rpm > %{buildroot}%{python3_sitelib}/pip-%{version}.dist-info/INSTALLER
+%endif
+%endif
+
+%if %{with tests}
+%check
+%if %{with python2}
+py.test-%{python2_version} -m 'not network'
+%endif
+%if %{with python3}
+py.test-%{python3_version} -m 'not network'
+%endif
+%endif
+
+
+%if %{with python2}
+%files -n python2-%{srcname}
+%license LICENSE.txt
+%doc README.rst
+%if %{with doc}
+%{_mandir}/man1/pip.*
+%{_mandir}/man1/pip2.*
+%endif
+%{_bindir}/pip
+%{_bindir}/pip2
+%{_bindir}/pip-2
+%{_bindir}/pip%{python2_version}
+%{_bindir}/pip-%{python2_version}
+%{python2_sitelib}/pip*
+%dir %{bashcompdir}
+%{bashcompdir}/pip
+%if 0%{?bashcomp2}
+%{bashcompdir}/pip2*
+%dir %(dirname %{bashcompdir})
+%endif
+%endif # with python2
+
+%if %{with python3}
+%files -n python%{python3_pkgversion}-%{srcname}
+%license LICENSE.txt
+%doc README.rst
+%if %{with doc}
+%{_mandir}/man1/pip3.*
+%endif
+%{_bindir}/pip3
+%{_bindir}/pip-3
+%{_bindir}/pip%{python3_version}
+%{_bindir}/pip-%{python3_version}
+%{python3_sitelib}/pip*
+%dir %{bashcompdir}
+%{bashcompdir}/pip3*
+%if 0%{?bashcomp2}
+%dir %(dirname %{bashcompdir})
+%endif
+
+%if %{with doc}
+%files doc
+%license LICENSE.txt
+%doc README.rst
+%doc docs/_build/html
+%endif # with doc
+%endif # with python3
+
+%changelog
+* Thu Mar 21 2019 Tomas Orsava <torsava@redhat.com> - 9.0.3-5
+- Add a workaround for a bug in bytecompilation (rhbz#1691402)
+Resolves: rhbz#1660573
+
+* Thu Mar 14 2019 Tomas Orsava <torsava@redhat.com> - 9.0.3-4
+- Finish bootstrapping in RHEL-7.7
+Resolves: rhbz#1660573
+
+* Mon Jan 14 2019 Lumír Balhar <lbalhar@redhat.com> - 9.0.3-3
+- Converting pip specfile from F28 to RHEL7
+- Disabled building of the Python 2 subpackage
+- Disabled building of docs, because we don't ship its build dependencies in
+  RHEL7
+- Updated to a newer version of tests to match the package version
+- Backported Patch3 and Patch4 from Fedora
+Resolves: rhbz#1660573
+
+* Fri May 04 2018 Miro Hrončok <mhroncok@redhat.com> - 9.0.3-2
+- Allow to import pip10's main from pip9's /usr/bin/pip
+- Do not show the "new version of pip" warning outside of venv
+Resolves: rhbz#1569488
+Resolves: rhbz#1571650
+Resolves: rhbz#1573755
+
+* Thu Mar 29 2018 Charalampos Stratakis <cstratak@redhat.com> - 9.0.3-1
+- Update to 9.0.3
+
+* Wed Feb 21 2018 Lumír Balhar <lbalhar@redhat.com> - 9.0.1-16
+- Include built HTML documentation (in the new -doc subpackage) and man page
+
+* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 9.0.1-15
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
+* Mon Dec 04 2017 Charalampos Stratakis <cstratak@redhat.com> - 9.0.1-14
+- Reintroduce the ipaddress module in the python3 subpackage.
+
+* Mon Nov 20 2017 Charalampos Stratakis <cstratak@redhat.com> - 9.0.1-13
+- Add virtual provides for the bundled libraries. (rhbz#1096912)
+
+* Tue Aug 29 2017 Tomas Orsava <torsava@redhat.com> - 9.0.1-12
+- Switch macros to bcond's and make Python 2 optional to facilitate building
+  the Python 2 and Python 3 modules
+
+* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 9.0.1-11
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Tue May 23 2017 Tomas Orsava <torsava@redhat.com> - 9.0.1-10
+- Modernized package descriptions
+Resolves: rhbz#1452568
+
+* Tue Mar 21 2017 Tomas Orsava <torsava@redhat.com> - 9.0.1-9
+- Fix typo in the sudo pip warning
+
+* Fri Mar 03 2017 Tomas Orsava <torsava@redhat.com> - 9.0.1-8
+- Patch 1 update: No sudo pip warning in venv or virtualenv
+
+* Thu Feb 23 2017 Tomas Orsava <torsava@redhat.com> - 9.0.1-7
+- Patch 1 update: Customize the warning with the proper version of the pip
+  command
+
+* Tue Feb 14 2017 Tomas Orsava <torsava@redhat.com> - 9.0.1-6
+- Added patch 1: Emit a warning when running with root privileges
+
+* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 9.0.1-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Mon Jan 02 2017 Tomas Orsava <torsava@redhat.com> - 9.0.1-4
+- Provide symlinks to executables to comply with Fedora guidelines for Python
+Resolves: rhbz#1406922
+
+* Fri Dec 09 2016 Charalampos Stratakis <cstratak@redhat.com> - 9.0.1-3
+- Rebuild for Python 3.6 with wheel
+
+* Fri Dec 09 2016 Charalampos Stratakis <cstratak@redhat.com> - 9.0.1-2
+- Rebuild for Python 3.6 without wheel
+
+* Fri Nov 18 2016 Orion Poplawski <orion@cora.nwra.com> - 9.0.1-1
+- Update to 9.0.1
+
+* Fri Nov 18 2016 Orion Poplawski <orion@cora.nwra.com> - 8.1.2-5
+- Enable EPEL Python 3 builds
+- Use new python macros
+- Cleanup spec
+
+* Fri Aug 05 2016 Tomas Orsava <torsava@redhat.com> - 8.1.2-4
+- Updated the test sources
+
+* Fri Aug 05 2016 Tomas Orsava <torsava@redhat.com> - 8.1.2-3
+- Moved python-pip into the python2-pip subpackage
+- Added the python_provide macro
+
+* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 8.1.2-2
+- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
+
+* Tue May 17 2016 Tomas Orsava <torsava@redhat.com> - 8.1.2-1
+- Update to 8.1.2
+- Moved to a new PyPI URL format
+- Updated the prefix-stripping patch because of upstream changes in pip/wheel.py
+
+* Mon Feb 22 2016 Slavek Kabrda <bkabrda@redhat.com> - 8.0.2-1
+- Update to 8.0.2
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 7.1.0-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Wed Oct 14 2015 Robert Kuska <rkuska@redhat.com> - 7.1.0-3
+- Rebuilt for Python3.5 rebuild
+- With wheel set to 1
+
+* Tue Oct 13 2015 Robert Kuska <rkuska@redhat.com> - 7.1.0-2
+- Rebuilt for Python3.5 rebuild
+
+* Wed Jul 01 2015 Slavek Kabrda <bkabrda@redhat.com> - 7.1.0-1
+- Update to 7.1.0
+
+* Tue Jun 30 2015 Ville Skyttä <ville.skytta@iki.fi> - 7.0.3-3
+- Install bash completion
+- Ship LICENSE.txt as %%license where available
+
+* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 7.0.3-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Thu Jun 04 2015 Matej Stuchlik <mstuchli@redhat.com> - 7.0.3-1
+- Update to 7.0.3
+
+* Fri Mar 06 2015 Matej Stuchlik <mstuchli@redhat.com> - 6.0.8-1
+- Update to 6.0.8
+
+* Thu Dec 18 2014 Slavek Kabrda <bkabrda@redhat.com> - 1.5.6-5
+- Only enable tests on Fedora.
+
+* Mon Dec 01 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.6-4
+- Add tests
+- Add patch skipping tests requiring Internet access
+
+* Tue Nov 18 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.6-3
+- Added patch for local dos with predictable temp dictionary names
+  (http://seclists.org/oss-sec/2014/q4/655)
+
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.5.6-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Sun May 25 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.6-1
+- Update to 1.5.6
+
+* Fri Apr 25 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.4-4
+- Rebuild as wheel for Python 3.4
+
+* Thu Apr 24 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.4-3
+- Disable build_wheel
+
+* Thu Apr 24 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.4-2
+- Rebuild as wheel for Python 3.4
+
+* Mon Apr 07 2014 Matej Stuchlik <mstuchli@redhat.com> - 1.5.4-1
+- Updated to 1.5.4
+
+* Mon Oct 14 2013 Tim Flink <tflink@fedoraproject.org> - 1.4.1-1
+- Removed patch for CVE 2013-2099 as it has been included in the upstream 1.4.1 release
+- Updated version to 1.4.1
+
+* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.3.1-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
+* Tue Jul 16 2013 Toshio Kuratomi <toshio@fedoraproject.org> - 1.3.1-4
+- Fix for CVE 2013-2099
+
+* Thu May 23 2013 Tim Flink <tflink@fedoraproject.org> - 1.3.1-3
+- undo python2 executable rename to python-pip. fixes #958377
+- fix summary to match upstream
+
+* Mon May 06 2013 Kevin Kofler <Kevin@tigcc.ticalc.org> - 1.3.1-2
+- Fix main package Summary, it's for Python 2, not 3 (#877401)
+
+* Fri Apr 26 2013 Jon Ciesla <limburgher@gmail.com> - 1.3.1-1
+- Update to 1.3.1, fix for CVE-2013-1888.
+
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.2.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
+* Tue Oct 09 2012 Tim Flink <tflink@fedoraproject.org> - 1.2.1-2
+- Fixing files for python3-pip
+
+* Thu Oct 04 2012 Tim Flink <tflink@fedoraproject.org> - 1.2.1-1
+- Update to upstream 1.2.1
+- Change binary from pip-python to python-pip (RHBZ#855495)
+- Add alias from python-pip to pip-python, to be removed at a later date
+
+* Tue May 15 2012 Tim Flink <tflink@fedoraproject.org> - 1.1.0-1
+- Update to upstream 1.1.0
+
+* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
+* Sat Oct 22 2011 Tim Flink <tflink@fedoraproject.org> - 1.0.2-1
+- update to 1.0.2 and added python3 subpackage
+
+* Wed Jun 22 2011 Tim Flink <tflink@fedoraproject.org> - 0.8.3-1
+- update to 0.8.3 and project home page
+
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.8.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Mon Dec 20 2010 Luke Macken <lmacken@redhat.com> - 0.8.2-1
+- update to 0.8.2 of pip
+* Mon Aug 30 2010 Peter Halliday <phalliday@excelsiorsystems.net> - 0.8-1
+- update to 0.8 of pip
+* Thu Jul 22 2010 David Malcolm <dmalcolm@redhat.com> - 0.7.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
+
+* Wed Jul 7 2010 Peter Halliday <phalliday@excelsiorsystems.net> - 0.7.2-1
+- update to 0.7.2 of pip
+* Sun May 23 2010 Peter Halliday <phalliday@excelsiorsystems.net> - 0.7.1-1
+- update to 0.7.1 of pip
+* Fri Jan 1 2010 Peter Halliday <phalliday@excelsiorsystems.net> - 0.6.1.4
+- fix dependency issue
+* Fri Dec 18 2009 Peter Halliday <phalliday@excelsiorsystems.net> - 0.6.1-2
+- fix spec file 
+* Thu Dec 17 2009 Peter Halliday <phalliday@excelsiorsystems.net> - 0.6.1-1
+- upgrade to 0.6.1 of pip
+* Mon Aug 31 2009 Peter Halliday <phalliday@excelsiorsystems.net> - 0.4-1
+- Initial package
+