From 2e61c256f39280e2b88b112b838a1f01703afd25 Mon Sep 17 00:00:00 2001 From: Charalampos Stratakis Date: Thu, 29 Mar 2018 15:17:28 +0200 Subject: [PATCH 1/3] Update to 9.0.3 --- .gitignore | 2 ++ python-pip.spec | 7 +++++-- sources | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 4844c76..5abdf9b 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,5 @@ pip-0.7.2.tar.gz /pip-8.1.2-tests.tar.gz /pip-9.0.1.tar.gz /pip-9.0.1-tests.tar.gz +/pip-9.0.3.tar.gz +/pip-9.0.3-tests.tar.gz diff --git a/python-pip.spec b/python-pip.spec index cb73b02..79ca255 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -24,8 +24,8 @@ Name: python-%{srcname} # When updating, update the bundled libraries versions bellow! -Version: 9.0.1 -Release: 14%{?dist} +Version: 9.0.3 +Release: 1%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries @@ -331,6 +331,9 @@ py.test-%{python3_version} -m 'not network' %endif # with python3 %changelog +* Thu Mar 29 2018 Charalampos Stratakis - 9.0.3-1 +- Update to 9.0.3 + * Mon Dec 04 2017 Charalampos Stratakis - 9.0.1-14 - Reintroduce the ipaddress module in the python3 subpackage. diff --git a/sources b/sources index 31e725f..49c5067 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -35f01da33009719497f01a4ba69d63c9 pip-9.0.1.tar.gz -93ea1b8882c0e3e0e52d5034970d900f pip-9.0.1-tests.tar.gz +SHA512 (pip-9.0.3.tar.gz) = daf5bb2460787a0391400d5e074fc69c78d623445fcc6fcb12fae9a118f19692cc7ce316a7e85a04662bc82c0a0514577fa1ca8323b09be0d08c7a7bb8728e77 +SHA512 (pip-9.0.3-tests.tar.gz) = 5cc7c06b2c688307d2e081e01d750c1c462f34879ddffe204fa4523d4d4dc0afc9f584ff9bdc86768944bccd8bf79d93c87e9935b3a38e22aeb2fd839cce1447 From 7bfc7e8c5537438c453e65eb538dce1c880241f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Fri, 4 May 2018 12:11:26 +0200 Subject: [PATCH 2/3] Allow to import pip10's main from pip9's /usr/bin/pip 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 a 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. This is a workaround for: * https://bugzilla.redhat.com/show_bug.cgi?id=1569488 * https://bugzilla.redhat.com/show_bug.cgi?id=1571650 Patch is applied in %install, because /usr/bin/pip* are entrypoints. --- pip9-allow-pip10-import.patch | 16 ++++++++++++++++ python-pip.spec | 30 +++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 pip9-allow-pip10-import.patch diff --git a/pip9-allow-pip10-import.patch b/pip9-allow-pip10-import.patch new file mode 100644 index 0000000..657b7b3 --- /dev/null +++ b/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/python-pip.spec b/python-pip.spec index 79ca255..da00b82 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -25,7 +25,7 @@ Name: python-%{srcname} # When updating, update the bundled libraries versions bellow! Version: 9.0.3 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A tool for installing and managing Python packages Group: Development/Libraries @@ -56,6 +56,24 @@ Patch0: allow-stripping-given-prefix-from-wheel-RECORD-files.patch # Issue upstream: https://github.com/pypa/pip/issues/4288 Patch1: emit-a-warning-when-running-with-root-privileges.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 @@ -230,6 +248,11 @@ rm %{buildroot}%{_bindir}/pip %endif %endif # with python2 +# before we ln -s anything, we apply Source10 patch to all pips: +for PIP in %{buildroot}%{_bindir}/pip*; do + patch -p1 $PIP < %{SOURCE10} +done + mkdir -p %{buildroot}%{bashcompdir} %if %{with python2} PYTHONPATH=%{buildroot}%{python2_sitelib} \ @@ -331,6 +354,11 @@ py.test-%{python3_version} -m 'not network' %endif # with python3 %changelog +* Fri May 04 2018 Miro Hrončok - 9.0.3-2 +- Allow to import pip10's main from pip9's /usr/bin/pip +Resolves: rhbz#1569488 +Resolves: rhbz#1571650 + * Thu Mar 29 2018 Charalampos Stratakis - 9.0.3-1 - Update to 9.0.3 From 663a332e12703b936ca5c5891ba145decd94178c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Fri, 4 May 2018 14:26:11 +0200 Subject: [PATCH 3/3] When pip is run outside of venv, don't show the upgrade warning This is a fix for https://bugzilla.redhat.com/show_bug.cgi?id=1573755 1. We put "rpm" inside pip's INSTALLER instead of "pip" 2. From pip, we check what's in INSTALLER and only show the warning if it's "pip". When a venv is cearted, pip is installed from wheel (trough rewheel), INSTALLER contains "pip". When virtualenv is used, pip is installed from the Interwebz via pip, so INSTALLER contains "pip". Upstream issue https://github.com/pypa/pip/issues/5346 --- pip-nowarn-upgrade.patch | 36 ++++++++++++++++++++++++++++++++++++ python-pip.spec | 17 +++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 pip-nowarn-upgrade.patch diff --git a/pip-nowarn-upgrade.patch b/pip-nowarn-upgrade.patch new file mode 100644 index 0000000..9e314a5 --- /dev/null +++ b/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/python-pip.spec b/python-pip.spec index da00b82..7022c0a 100644 --- a/python-pip.spec +++ b/python-pip.spec @@ -56,6 +56,11 @@ Patch0: allow-stripping-given-prefix-from-wheel-RECORD-files.patch # 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 + # Downstream only patch # Users are upgrading pip9 to pip10 by various manners, # one of them is `pip install --user --upgrade pip`. @@ -202,6 +207,7 @@ tar -xf %{SOURCE1} %patch0 -p1 %patch1 -p1 +%patch2 -p1 sed -i '1d' pip/__init__.py @@ -308,6 +314,15 @@ 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 %{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 + %if %{with tests} %check %if %{with python2} @@ -356,8 +371,10 @@ py.test-%{python3_version} -m 'not network' %changelog * Fri May 04 2018 Miro Hrončok - 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 - 9.0.3-1 - Update to 9.0.3