Compare commits

..

12 Commits
master ... f30

Author SHA1 Message Date
Tomas Hrnciar e3c456a82e Remove doctree pickles
This commit removes hidden doctree folder which serves as a cache for
Sphinx when documentation is build. It's useless for user and creates
rpmlint warning hidden-file-or-dir.
2020-04-23 15:40:39 +02:00
Tomas Hrnciar eb86669145 Replace pypi source with tarball from GitHub
Pypi source does not include tests folder so they had to be manually
downloaded from GitHub. This commit replaces pypi source with tarball
from GitHub where tests are included.
This also fixes rpmlint invalid-url warning.
2020-04-23 15:40:39 +02:00
Tomas Hrnciar f531fcd7f9 Add rpmlint config to filter not important warnings and errors
This commit adds rpmlint config to filter warning and errors
that are not really a problem. Such as no-documentation warning
for python-pip-wheel which has documentation README shipped with main
package but rpmlint does not see it.
Then it filters out venv spelling error and adds temporary filter for
non-executable-script and wrong-script-interpreter those will be fixed
once all upstream PRs will be merged.
2020-04-23 15:40:39 +02:00
Tomas Hrnciar 4e6fe2fd52 Link to man page for all executables
There are four different executables for python-pip, but so far only two of
them had man page. This commit makes man page available for rest of the
executables via links.
2020-04-23 15:40:36 +02:00
Miro Hrončok 532acabf2d Allow setting $TMPDIR to $PWD/... during pip wheel
Needed for https://bugzilla.redhat.com/show_bug.cgi?id=1806625
2020-04-21 16:54:18 +02:00
Miro Hrončok ce39f5d820 Make patches apply --without tests
Some patches touch tests and we didn't include the test sources --without tests,
leading to broken build. This was a long standing reoccurring problem.

Now we always include and unpack tests sources, even when we don't run them.
2020-04-21 13:47:41 +02:00
Miro Hrončok 23ad191d95 Fedora CI: Run %pyproject macros integration tests 2020-04-21 13:47:30 +02:00
Miro Hrončok afb5be3c75 Upgrade urllib3 to 1.25.3, requests to 2.22.0
- Fix urllib3 CVE-2019-11324 (#1774595)
- Fix urllib3 CVE-2019-11236 (#1775363)
2020-01-02 13:20:59 +01:00
Miro Hrončok 46d2457dea Make python-pip-wheel work with Python 3.9 2019-11-26 00:10:12 +01:00
Miro Hrončok f331d00c56 Make /usr/bin/pip(2|3) work with user-installed pip 19.3+
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=1767212

== Before:

$ rpm -q python3-pip
python3-pip-19.0.3-3.fc30.noarch

$ rpm -q python2-pip
python2-pip-19.0.3-3.fc30.noarch

$ /usr/bin/pip --version
pip 19.0.3 from /usr/lib/python2.7/site-packages/pip (python 2.7)

$ /usr/bin/pip2 --version
pip 19.0.3 from /usr/lib/python2.7/site-packages/pip (python 2.7)

$ /usr/bin/pip3 --version
pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

$ pip{2,3} install --user --upgrade pip
...
Successfully installed pip-19.3.1

$ /usr/bin/pip{,2,3} --version
Traceback (most recent call last):
  File "/usr/bin/pip{,2,3}", line 15, in <module>
    sys.exit(main())
TypeError: 'module' object is not callable

$ rm .local/ -rf
$ pip{2,3} install --user --upgrade 'pip<10'
...
Successfully installed pip-9.0.3

$ /usr/bin/pip --version
pip 9.0.3 from /home/pythonista/.local/lib/python2.7/site-packages (python 2.7)

$ /usr/bin/pip2 --version
pip 9.0.3 from /home/pythonista/.local/lib/python2.7/site-packages (python 2.7)

$ /usr/bin/pip3 --version
pip 9.0.3 from /home/pythonista/.local/lib/python3.7/site-packages (python 3.7)

$ pip{2,3} install --user --upgrade 'pip<9'
...
Successfully installed pip-8.1.2

$ /usr/bin/pip --version
pip 8.1.2 from /home/pythonista/.local/lib/python2.7/site-packages (python 2.7)

$ /usr/bin/pip2 --version
pip 8.1.2 from /home/pythonista/.local/lib/python2.7/site-packages (python 2.7)

$ /usr/bin/pip3 --version
pip 8.1.2 from /home/pythonista/.local/lib/python3.7/site-packages (python 3.7)

== After

$ rpm -q python3-pip
python3-pip-19.0.3-4.fc30.noarch

$ rpm -q python2-pip
python2-pip-19.0.3-4.fc30.noarch

$ /usr/bin/pip --version
pip 19.0.3 from /usr/lib/python2.7/site-packages/pip (python 2.7)

$ /usr/bin/pip2 --version
pip 19.0.3 from /usr/lib/python2.7/site-packages/pip (python 2.7)

$ /usr/bin/pip3 --version
pip 19.0.3 from /usr/lib/python3.7/site-packages/pip (python 3.7)

$ pip{2,3} install --user --upgrade pip
...
Successfully installed pip-19.3.1

$ /usr/bin/pip --version
pip 19.3.1 from /home/pythonista/.local/lib/python2.7/site-packages/pip (python 2.7)

$ /usr/bin/pip2 --version
pip 19.3.1 from /home/pythonista/.local/lib/python2.7/site-packages/pip (python 2.7)

$ /usr/bin/pip3 --version
pip 19.3.1 from /home/pythonista/.local/lib/python3.7/site-packages/pip (python 3.7)

$ pip{2,3} install --user --upgrade 'pip<10'
...
Successfully installed pip-9.0.3

$ /usr/bin/pip --version
pip 9.0.3 from /home/pythonista/.local/lib/python2.7/site-packages (python 2.7)

$ /usr/bin/pip2 --version
pip 9.0.3 from /home/pythonista/.local/lib/python2.7/site-packages (python 2.7)

$ /usr/bin/pip3 --version
pip 9.0.3 from /home/pythonista/.local/lib/python3.7/site-packages (python 3.7)

$ pip{2,3} install --user --upgrade 'pip<9'
...
Successfully installed pip-8.1.2

$ /usr/bin/pip --version
pip 8.1.2 from /home/pythonista/.local/lib/python2.7/site-packages (python 2.7)

$ /usr/bin/pip2 --version
pip 8.1.2 from /home/pythonista/.local/lib/python2.7/site-packages (python 2.7)

$ /usr/bin/pip3 --version
pip 8.1.2 from /home/pythonista/.local/lib/python3.7/site-packages (python 3.7)
2019-11-11 12:16:18 +01:00
Petr Viktorin a6cc25fd91 Recommend libcrypt.so.1 for manylinux1 compatibility 2019-07-16 14:02:06 +02:00
Miro Hrončok 0cbb870d2e Fix root warning when pip is invoked via python -m pip
Fixes https://github.com/pypa/pip/issues/6576
2019-07-16 13:59:51 +02:00
18 changed files with 6478 additions and 1158 deletions

41
.gitignore vendored
View File

@ -1,7 +1,34 @@
/*.tar.gz pip-0.7.2.tar.gz
/*.zip /pip-0.8.tar.gz
/pip-*/ /pip-0.8.2.tar.gz
/pip/ /pip-0.8.3.tar.gz
/results_python-pip/ /pip-1.0.2.tar.gz
*.rpm /pip-1.1.tar.gz
/pip-1.3.1.tar.gz
/pip-1.4.1.tar.gz
/pip-1.5.4.tar.gz
/pip-1.5.6.tar.gz
/pip-1.5.6-tests.tar.gz
/pip-6.0.8.tar.gz
/pip-7.0.3.tar.gz
/pip-7.1.0.tar.gz
/pip-7.1.0-tests.tar.gz
/pip-8.0.2.tar.gz
/pip-8.1.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
/pip-10.0.1.tar.gz
/pip-18.0.tar.gz
/d2e63fbfc62af3b7050f619b2f5bb8658985b931.zip
/2018.2.tar.gz
/pip-18.0-tests.tar.gz
/d2e63fbfc62af3b7050f619b2f5bb8658985b931.tar.gz
/pip-18.1.tar.gz
/pip-18.1-tests.tar.gz
/pip-19.0.2.tar.gz
/pip-19.0.2-tests.tar.gz
/pip-19.0.3.tar.gz
/pip-19.0.3-tests.tar.gz

167
7873.patch Normal file
View File

@ -0,0 +1,167 @@
From e65d560c1c92278085510771a7f696d804081948 Mon Sep 17 00:00:00 2001
From: Tomas Hrnciar <thrnciar@redhat.com>
Date: Mon, 20 Apr 2020 14:14:05 +0200
Subject: [PATCH 1/2] Backport of necessary changes from PR #6770, needed for
backport of PR #7872
https://github.com/pypa/pip/pull/6770
---
src/pip/_internal/download.py | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/src/pip/_internal/download.py b/src/pip/_internal/download.py
index 2bbe1762..b3bd2414 100644
--- a/src/pip/_internal/download.py
+++ b/src/pip/_internal/download.py
@@ -729,9 +729,20 @@ def unpack_file_url(
# If it's a url to a local directory
if is_dir_url(link):
+
+ def ignore(d, names):
+ # Pulling in those directories can potentially be very slow,
+ # exclude the following directories if they appear in the top
+ # level dir (and only it).
+ # See discussion at https://github.com/pypa/pip/pull/6770
+ return ['.tox', '.nox'] if d == link_path else []
if os.path.isdir(location):
rmtree(location)
- shutil.copytree(link_path, location, symlinks=True)
+ shutil.copytree(link_path,
+ location,
+ symlinks=True,
+ ignore=ignore)
+
if download_dir:
logger.info('Link is a directory, ignoring download_dir')
return
--
2.23.0
From f4ee6c36a8b37b1a325d2e2d47d6b3684ca5566b Mon Sep 17 00:00:00 2001
From: Tomas Hrnciar <thrnciar@redhat.com>
Date: Mon, 20 Apr 2020 14:46:49 +0200
Subject: [PATCH 2/2] Prevent infinite recursion with pip wheel with $TMPDIR in
$PWD
During a build of extension module within `pip wheel` the source directory is
recursively copied in a temporary directory.
See https://github.com/pypa/pip/issues/7555
When the temporary directory is inside the source directory
(for example by setting `TMPDIR=$PWD/tmp`) this caused an infinite recursion
that ended in:
[Errno 36] File name too long
We prevent that buy never copying the target to the target in _copy_source_tree.
Fixes https://github.com/pypa/pip/issues/7872
Avoid a test dependency on a C compiler, skip the test on Windows
---
news/7872.bugfix | 1 +
src/pip/_internal/download.py | 23 ++++++++++++++++++-----
tests/data/src/extension/extension.c | 0
tests/data/src/extension/setup.py | 4 ++++
tests/functional/test_wheel.py | 17 +++++++++++++++++
5 files changed, 40 insertions(+), 5 deletions(-)
create mode 100644 news/7872.bugfix
create mode 100644 tests/data/src/extension/extension.c
create mode 100644 tests/data/src/extension/setup.py
diff --git a/news/7872.bugfix b/news/7872.bugfix
new file mode 100644
index 00000000..3550d573
--- /dev/null
+++ b/news/7872.bugfix
@@ -0,0 +1 @@
+Prevent an infinite recursion with ``pip wheel`` when ``$TMPDIR`` is within the source directory.
diff --git a/src/pip/_internal/download.py b/src/pip/_internal/download.py
index b3bd2414..80689012 100644
--- a/src/pip/_internal/download.py
+++ b/src/pip/_internal/download.py
@@ -729,13 +729,26 @@ def unpack_file_url(
# If it's a url to a local directory
if is_dir_url(link):
+ target_abspath = os.path.abspath(location)
+ target_basename = os.path.basename(target_abspath)
+ target_dirname = os.path.dirname(target_abspath)
def ignore(d, names):
- # Pulling in those directories can potentially be very slow,
- # exclude the following directories if they appear in the top
- # level dir (and only it).
- # See discussion at https://github.com/pypa/pip/pull/6770
- return ['.tox', '.nox'] if d == link_path else []
+ # type: (str, List[str]) -> List[str]
+ skipped = [] # type: List[str]
+ if d == link_path:
+ # Pulling in those directories can potentially be very slow,
+ # exclude the following directories if they appear in the top
+ # level dir (and only it).
+ # See discussion at https://github.com/pypa/pip/pull/6770
+ skipped += ['.tox', '.nox']
+ if os.path.abspath(d) == target_dirname:
+ # Prevent an infinite recursion if the target is in source.
+ # This can happen when TMPDIR is set to ${PWD}/...
+ # and we copy PWD to TMPDIR.
+ skipped += [target_basename]
+ return skipped
+
if os.path.isdir(location):
rmtree(location)
shutil.copytree(link_path,
diff --git a/tests/data/src/extension/extension.c b/tests/data/src/extension/extension.c
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/data/src/extension/setup.py b/tests/data/src/extension/setup.py
new file mode 100644
index 00000000..b26302b0
--- /dev/null
+++ b/tests/data/src/extension/setup.py
@@ -0,0 +1,4 @@
+from setuptools import Extension, setup
+
+module = Extension('extension', sources=['extension.c'])
+setup(name='extension', version='0.0.1', ext_modules = [module])
diff --git a/tests/functional/test_wheel.py b/tests/functional/test_wheel.py
index 7ab76c13..2a418bf4 100644
--- a/tests/functional/test_wheel.py
+++ b/tests/functional/test_wheel.py
@@ -1,5 +1,6 @@
"""'pip wheel' tests"""
import os
+import sys
from os.path import exists
import pytest
@@ -218,6 +219,22 @@ def test_pip_wheel_with_user_set_in_config(script, data, common_wheels):
)
assert "Successfully built withpyproject" in result.stdout, result.stdout
+@pytest.mark.skipif(sys.platform.startswith('win'),
+ reason='The empty extension module does not work on Win')
+def test_pip_wheel_ext_module_with_tmpdir_inside(script, data, common_wheels):
+ tmpdir = data.src / 'extension/tmp'
+ tmpdir.mkdir()
+ script.environ['TMPDIR'] = str(tmpdir)
+
+ # To avoid a test dependency on a C compiler, we set the env vars to "noop"
+ # The .c source is empty anyway
+ script.environ['CC'] = script.environ['LDSHARED'] = str('true')
+
+ result = script.pip(
+ 'wheel', data.src / 'extension',
+ '--no-index', '-f', common_wheels
+ )
+ assert "Successfully built extension" in result.stdout, result.stdout
def test_pep517_wheels_are_not_confused_with_other_files(script, tmpdir, data):
"""Check correct wheels are copied. (#6196)
--
2.23.0

View File

@ -0,0 +1,110 @@
diff --git a/src/pip/_internal/commands/install.py b/src/pip/_internal/commands/install.py
index 1c244d23..4b07ec0f 100644
--- a/src/pip/_internal/commands/install.py
+++ b/src/pip/_internal/commands/install.py
@@ -109,6 +109,14 @@ class InstallCommand(RequirementCommand):
default=None,
help="Installation prefix where lib, bin and other top-level "
"folders are placed")
+ 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(cmdoptions.build_dir())
@@ -391,6 +399,7 @@ class InstallCommand(RequirementCommand):
pycompile=options.compile,
warn_script_location=warn_script_location,
use_user_site=options.use_user_site,
+ strip_file_prefix=options.strip_file_prefix,
)
lib_locations = get_lib_location_guesses(
diff --git a/src/pip/_internal/req/req_install.py b/src/pip/_internal/req/req_install.py
index a4834b00..d21530ac 100644
--- a/src/pip/_internal/req/req_install.py
+++ b/src/pip/_internal/req/req_install.py
@@ -431,7 +431,8 @@ class InstallRequirement(object):
prefix=None, # type: Optional[str]
warn_script_location=True, # type: bool
use_user_site=False, # type: bool
- pycompile=True # type: bool
+ pycompile=True, # type: bool
+ strip_file_prefix=None # type: Optional[str]
):
# type: (...) -> None
move_wheel_files(
@@ -443,6 +444,7 @@ class InstallRequirement(object):
pycompile=pycompile,
isolated=self.isolated,
warn_script_location=warn_script_location,
+ strip_file_prefix=strip_file_prefix,
)
# Things valid for sdists
@@ -894,7 +896,8 @@ class InstallRequirement(object):
prefix=None, # type: Optional[str]
warn_script_location=True, # type: bool
use_user_site=False, # type: bool
- pycompile=True # type: bool
+ pycompile=True, # type: bool
+ strip_file_prefix=None # type: Optional[str]
):
# type: (...) -> None
global_options = global_options if global_options is not None else []
@@ -911,6 +914,7 @@ class InstallRequirement(object):
self.source_dir, root=root, prefix=prefix, home=home,
warn_script_location=warn_script_location,
use_user_site=use_user_site, pycompile=pycompile,
+ strip_file_prefix=strip_file_prefix,
)
self.install_succeeded = True
return
diff --git a/src/pip/_internal/wheel.py b/src/pip/_internal/wheel.py
index 67bcc7f7..6470576b 100644
--- a/src/pip/_internal/wheel.py
+++ b/src/pip/_internal/wheel.py
@@ -265,6 +265,7 @@ def get_csv_rows_for_installed(
changed, # type: set
generated, # type: List[str]
lib_dir, # type: str
+ strip_file_prefix=None, # type: Optional[str]
):
# type: (...) -> List[InstalledCSVRow]
"""
@@ -289,7 +290,11 @@ def get_csv_rows_for_installed(
installed_rows.append(tuple(row))
for f in generated:
digest, length = rehash(f)
- installed_rows.append((normpath(f, lib_dir), digest, str(length)))
+ 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))
+ installed_rows.append((final_path, digest, str(length)))
for f in installed:
installed_rows.append((installed[f], '', ''))
return installed_rows
@@ -306,7 +311,8 @@ def move_wheel_files(
scheme=None, # type: Optional[Mapping[str, str]]
isolated=False, # type: bool
prefix=None, # type: Optional[str]
- warn_script_location=True # type: bool
+ warn_script_location=True, # type: bool
+ strip_file_prefix=None # type: Optional[str]
):
# type: (...) -> None
"""Install a wheel"""
@@ -605,6 +611,7 @@ if __name__ == '__main__':
outrows = get_csv_rows_for_installed(
reader, installed=installed, changed=changed,
generated=generated, lib_dir=lib_dir,
+ strip_file_prefix=strip_file_prefix
)
writer = csv.writer(record_out)
# Sort to simplify testing.

View File

@ -1,75 +0,0 @@
From b30dd1e04e1f37901733f1be0a5a1e02c466ad0c Mon Sep 17 00:00:00 2001
From: gutsytechster <prashantsharma161198@gmail.com>
Date: Wed, 15 Apr 2020 19:54:48 +0530
Subject: [PATCH] fix(tests/unit): Update tests to be endian safe
This updates `test_path_to_display` and `test_str_to_display__encoding`
to use the endian safe expected result instead of the hardcoded one.
This fixes https://github.com/pypa/pip/issues/7921
---
tests/unit/test_compat.py | 8 +++++++-
tests/unit/test_utils.py | 16 +++++++++++++---
2 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/tests/unit/test_compat.py b/tests/unit/test_compat.py
index 1f31bc5ce8..b13087a1dd 100644
--- a/tests/unit/test_compat.py
+++ b/tests/unit/test_compat.py
@@ -2,6 +2,7 @@
import locale
import os
+import sys
import pytest
@@ -91,8 +92,13 @@ def test_str_to_display__decode_error(monkeypatch, caplog):
# Encode with an incompatible encoding.
data = u'ab'.encode('utf-16')
actual = str_to_display(data)
+ # Keep the expected value endian safe
+ if sys.byteorder == "little":
+ expected = "\\xff\\xfea\x00b\x00"
+ elif sys.byteorder == "big":
+ expected = "\\xfe\\xff\x00a\x00b"
- assert actual == u'\\xff\\xfea\x00b\x00', (
+ assert actual == expected, (
# Show the encoding for easier troubleshooting.
'encoding: {!r}'.format(locale.getpreferredencoding())
)
diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py
index 7d74a66498..ebabd29e26 100644
--- a/tests/unit/test_utils.py
+++ b/tests/unit/test_utils.py
@@ -375,6 +375,18 @@ def test_rmtree_retries_for_3sec(tmpdir, monkeypatch):
rmtree('foo')
+if sys.byteorder == "little":
+ expected_byte_string = (
+ u"b'\\xff\\xfe/\\x00p\\x00a\\x00t\\x00h\\x00/"
+ "\\x00d\\x00\\xe9\\x00f\\x00'"
+ )
+elif sys.byteorder == "big":
+ expected_byte_string = (
+ u"b'\\xfe\\xff\\x00/\\x00p\\x00a\\x00t\\x00h\\"
+ "x00/\\x00d\\x00\\xe9\\x00f'"
+ )
+
+
@pytest.mark.parametrize('path, fs_encoding, expected', [
(None, None, None),
# Test passing a text (unicode) string.
@@ -383,9 +395,7 @@ def test_rmtree_retries_for_3sec(tmpdir, monkeypatch):
(u'/path/déf'.encode('utf-8'), 'utf-8', u'/path/déf'),
# Test a bytes object with a character that can't be decoded.
(u'/path/déf'.encode('utf-8'), 'ascii', u"b'/path/d\\xc3\\xa9f'"),
- (u'/path/déf'.encode('utf-16'), 'utf-8',
- u"b'\\xff\\xfe/\\x00p\\x00a\\x00t\\x00h\\x00/"
- "\\x00d\\x00\\xe9\\x00f\\x00'"),
+ (u'/path/déf'.encode('utf-16'), 'utf-8', expected_byte_string),
])
def test_path_to_display(monkeypatch, path, fs_encoding, expected):
monkeypatch.setattr(sys, 'getfilesystemencoding', lambda: fs_encoding)

View File

@ -1,27 +1,15 @@
From 09bf87d33141a5c06a1d410839d162262baa16c4 Mon Sep 17 00:00:00 2001
From: Tomas Hrnciar <thrnciar@redhat.com>
Date: Sun, 26 Apr 2020 21:38:44 +0200
Subject: [PATCH] Dummy certifi patch
---
src/pip/_vendor/certifi/core.py | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/pip/_vendor/certifi/core.py b/src/pip/_vendor/certifi/core.py diff --git a/src/pip/_vendor/certifi/core.py b/src/pip/_vendor/certifi/core.py
index 56b52a3c..e99043f0 100644 index 2d02ea4..b1e4975 100644
--- a/src/pip/_vendor/certifi/core.py --- a/src/pip/_vendor/certifi/core.py
+++ b/src/pip/_vendor/certifi/core.py +++ b/src/pip/_vendor/certifi/core.py
@@ -21,9 +21,7 @@ except ImportError: @@ -11,9 +11,7 @@ import os
def where(): def where():
- f = os.path.dirname(__file__) - f = os.path.dirname(__file__)
- -
- return os.path.join(f, "cacert.pem") - return os.path.join(f, 'cacert.pem')
+ return '/etc/pki/tls/certs/ca-bundle.crt' + return '/etc/pki/tls/certs/ca-bundle.crt'
def contents(): if __name__ == '__main__':
--
2.23.0

View File

@ -1,30 +1,19 @@
From 74bb5d26e232493de43adfa1f4b42b66fd701294 Mon Sep 17 00:00:00 2001
From: Tomas Hrnciar <thrnciar@redhat.com>
Date: Sun, 26 Apr 2020 13:52:24 +0200
Subject: [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
---
src/pip/_internal/commands/install.py | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/src/pip/_internal/commands/install.py b/src/pip/_internal/commands/install.py diff --git a/src/pip/_internal/commands/install.py b/src/pip/_internal/commands/install.py
index 70bda2e2..1e750ae1 100644 index 1279d4a..aeb9d26 100644
--- a/src/pip/_internal/commands/install.py --- a/src/pip/_internal/commands/install.py
+++ b/src/pip/_internal/commands/install.py +++ b/src/pip/_internal/commands/install.py
@@ -13,6 +13,8 @@ import operator @@ -5,6 +5,8 @@ import logging
import operator
import os import os
import shutil import shutil
import site
+import sys +import sys
+from os import path +from os import path
from optparse import SUPPRESS_HELP from optparse import SUPPRESS_HELP
from pip._vendor import pkg_resources from pip._vendor import pkg_resources
@@ -241,6 +243,23 @@ class InstallCommand(RequirementCommand): @@ -217,6 +219,23 @@ class InstallCommand(RequirementCommand):
raise CommandError("Can not combine '--user' and '--target'")
def run(self, options, args):
cmdoptions.check_install_build_global(options) cmdoptions.check_install_build_global(options)
+ +
+ def is_venv(): + def is_venv():
@ -33,12 +22,12 @@ index 70bda2e2..1e750ae1 100644
+ sys.base_prefix != sys.prefix)) + sys.base_prefix != sys.prefix))
+ +
+ # Check whether we have root privileges and aren't in venv/virtualenv + # Check whether we have root privileges and aren't in venv/virtualenv
+ if os.getuid() == 0 and not is_venv() and not options.root_path: + if os.getuid() == 0 and not is_venv():
+ command = path.basename(sys.argv[0]) + command = path.basename(sys.argv[0])
+ if command == "__main__.py": + if command == "__main__.py":
+ command = path.basename(sys.executable) + " -m pip" + command = path.basename(sys.executable) + " -m pip"
+ logger.warning( + logger.warning(
+ "Running pip install with root privileges is " + "WARNING: Running pip install with root privileges is "
+ "generally not a good idea. Try `%s install --user` instead." + "generally not a good idea. Try `%s install --user` instead."
+ % command + % command
+ ) + )
@ -46,6 +35,3 @@ index 70bda2e2..1e750ae1 100644
upgrade_strategy = "to-satisfy-only" upgrade_strategy = "to-satisfy-only"
if options.upgrade: if options.upgrade:
upgrade_strategy = options.upgrade_strategy upgrade_strategy = options.upgrade_strategy
--
2.23.0

View File

@ -1,683 +0,0 @@
From 621800d5c65aea36c6a1d9b685ff88f35cfce476 Mon Sep 17 00:00:00 2001
From: Tomas Orsava <torsava@redhat.com>
Date: Fri, 15 Nov 2019 19:44:54 +0100
Subject: [PATCH] Mark 6 tests as network tests
=================================== FAILURES ===================================
_______________________________ test_freeze_path _______________________________
tmpdir = Path('/tmp/pytest-of-mockbuild/pytest-0/test_freeze_path0')
script = <tests.lib.PipTestEnvironment object at 0x7fe950a4caf0>
data = <tests.lib.TestData object at 0x7fe950a4cc10>
def test_freeze_path(tmpdir, script, data):
"""
Test freeze with --path.
"""
> script.pip('install', '--find-links', data.find_links,
'--target', tmpdir, 'simple==2.0')
tests/functional/test_freeze.py:712:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/lib/__init__.py:593: in run
_check_stderr(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
stderr = "WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'N...t at 0x7fe6435ef280>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/\n"
allow_stderr_warning = False, allow_stderr_error = False
def _check_stderr(
stderr, allow_stderr_warning, allow_stderr_error,
):
"""
Check the given stderr for logged warnings and errors.
:param stderr: stderr output as a string.
:param allow_stderr_warning: whether a logged warning (or deprecation
message) is allowed. Must be True if allow_stderr_error is True.
:param allow_stderr_error: whether a logged error is allowed.
"""
assert not (allow_stderr_error and not allow_stderr_warning)
lines = stderr.splitlines()
for line in lines:
# First check for logging errors, which we don't allow during
# tests even if allow_stderr_error=True (since a logging error
# would signal a bug in pip's code).
# Unlike errors logged with logger.error(), these errors are
# sent directly to stderr and so bypass any configured log formatter.
# The "--- Logging error ---" string is used in Python 3.4+, and
# "Logged from file " is used in Python 2.
if (line.startswith('--- Logging error ---') or
line.startswith('Logged from file ')):
reason = 'stderr has a logging error, which is never allowed'
msg = make_check_stderr_message(stderr, line=line, reason=reason)
raise RuntimeError(msg)
if allow_stderr_error:
continue
if line.startswith('ERROR: '):
reason = (
'stderr has an unexpected error '
'(pass allow_stderr_error=True to permit this)'
)
msg = make_check_stderr_message(stderr, line=line, reason=reason)
raise RuntimeError(msg)
if allow_stderr_warning:
continue
if (line.startswith('WARNING: ') or
line.startswith(DEPRECATION_MSG_PREFIX)):
reason = (
'stderr has an unexpected warning '
'(pass allow_stderr_warning=True to permit this)'
)
msg = make_check_stderr_message(stderr, line=line, reason=reason)
> raise RuntimeError(msg)
E RuntimeError: stderr has an unexpected warning (pass allow_stderr_warning=True to permit this):
E Caused by line: "WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fe64364c850>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/"
E Complete stderr: WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fe64364c850>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fe64364cdc0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fe64364cf70>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fe6435ef130>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fe6435ef280>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
tests/lib/__init__.py:404: RuntimeError
________________________ test_freeze_path_exclude_user _________________________
tmpdir = Path('/tmp/pytest-of-mockbuild/pytest-0/test_freeze_path_exclude_user0')
script = <tests.lib.PipTestEnvironment object at 0x7fe950ec8fa0>
data = <tests.lib.TestData object at 0x7fe950ec8a30>
def test_freeze_path_exclude_user(tmpdir, script, data):
"""
Test freeze with --path and make sure packages from --user are not picked
up.
"""
script.pip_install_local('--find-links', data.find_links,
'--user', 'simple2')
> script.pip('install', '--find-links', data.find_links,
'--target', tmpdir, 'simple==1.0')
tests/functional/test_freeze.py:728:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/lib/__init__.py:593: in run
_check_stderr(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
stderr = "WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'N...t at 0x7f87ae751310>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/\n"
allow_stderr_warning = False, allow_stderr_error = False
def _check_stderr(
stderr, allow_stderr_warning, allow_stderr_error,
):
"""
Check the given stderr for logged warnings and errors.
:param stderr: stderr output as a string.
:param allow_stderr_warning: whether a logged warning (or deprecation
message) is allowed. Must be True if allow_stderr_error is True.
:param allow_stderr_error: whether a logged error is allowed.
"""
assert not (allow_stderr_error and not allow_stderr_warning)
lines = stderr.splitlines()
for line in lines:
# First check for logging errors, which we don't allow during
# tests even if allow_stderr_error=True (since a logging error
# would signal a bug in pip's code).
# Unlike errors logged with logger.error(), these errors are
# sent directly to stderr and so bypass any configured log formatter.
# The "--- Logging error ---" string is used in Python 3.4+, and
# "Logged from file " is used in Python 2.
if (line.startswith('--- Logging error ---') or
line.startswith('Logged from file ')):
reason = 'stderr has a logging error, which is never allowed'
msg = make_check_stderr_message(stderr, line=line, reason=reason)
raise RuntimeError(msg)
if allow_stderr_error:
continue
if line.startswith('ERROR: '):
reason = (
'stderr has an unexpected error '
'(pass allow_stderr_error=True to permit this)'
)
msg = make_check_stderr_message(stderr, line=line, reason=reason)
raise RuntimeError(msg)
if allow_stderr_warning:
continue
if (line.startswith('WARNING: ') or
line.startswith(DEPRECATION_MSG_PREFIX)):
reason = (
'stderr has an unexpected warning '
'(pass allow_stderr_warning=True to permit this)'
)
msg = make_check_stderr_message(stderr, line=line, reason=reason)
> raise RuntimeError(msg)
E RuntimeError: stderr has an unexpected warning (pass allow_stderr_warning=True to permit this):
E Caused by line: "WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f87ae7aa8e0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/"
E Complete stderr: WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f87ae7aa8e0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f87ae7aae50>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f87ae751040>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f87ae7511c0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f87ae751310>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
tests/lib/__init__.py:404: RuntimeError
__________________________ test_freeze_path_multiple ___________________________
tmpdir = Path('/tmp/pytest-of-mockbuild/pytest-0/test_freeze_path_multiple0')
script = <tests.lib.PipTestEnvironment object at 0x7fe950b43fd0>
data = <tests.lib.TestData object at 0x7fe950b43df0>
def test_freeze_path_multiple(tmpdir, script, data):
"""
Test freeze with multiple --path arguments.
"""
path1 = tmpdir / "path1"
os.mkdir(path1)
path2 = tmpdir / "path2"
os.mkdir(path2)
> script.pip('install', '--find-links', data.find_links,
'--target', path1, 'simple==2.0')
tests/functional/test_freeze.py:750:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/lib/__init__.py:593: in run
_check_stderr(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
stderr = "WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'N...t at 0x7f07e6253280>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/\n"
allow_stderr_warning = False, allow_stderr_error = False
def _check_stderr(
stderr, allow_stderr_warning, allow_stderr_error,
):
"""
Check the given stderr for logged warnings and errors.
:param stderr: stderr output as a string.
:param allow_stderr_warning: whether a logged warning (or deprecation
message) is allowed. Must be True if allow_stderr_error is True.
:param allow_stderr_error: whether a logged error is allowed.
"""
assert not (allow_stderr_error and not allow_stderr_warning)
lines = stderr.splitlines()
for line in lines:
# First check for logging errors, which we don't allow during
# tests even if allow_stderr_error=True (since a logging error
# would signal a bug in pip's code).
# Unlike errors logged with logger.error(), these errors are
# sent directly to stderr and so bypass any configured log formatter.
# The "--- Logging error ---" string is used in Python 3.4+, and
# "Logged from file " is used in Python 2.
if (line.startswith('--- Logging error ---') or
line.startswith('Logged from file ')):
reason = 'stderr has a logging error, which is never allowed'
msg = make_check_stderr_message(stderr, line=line, reason=reason)
raise RuntimeError(msg)
if allow_stderr_error:
continue
if line.startswith('ERROR: '):
reason = (
'stderr has an unexpected error '
'(pass allow_stderr_error=True to permit this)'
)
msg = make_check_stderr_message(stderr, line=line, reason=reason)
raise RuntimeError(msg)
if allow_stderr_warning:
continue
if (line.startswith('WARNING: ') or
line.startswith(DEPRECATION_MSG_PREFIX)):
reason = (
'stderr has an unexpected warning '
'(pass allow_stderr_warning=True to permit this)'
)
msg = make_check_stderr_message(stderr, line=line, reason=reason)
> raise RuntimeError(msg)
E RuntimeError: stderr has an unexpected warning (pass allow_stderr_warning=True to permit this):
E Caused by line: "WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f07e62ae850>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/"
E Complete stderr: WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f07e62ae850>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f07e62aedc0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f07e62aef70>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f07e6253130>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
E WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f07e6253280>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/simple/
tests/lib/__init__.py:404: RuntimeError
_________________ test_install_no_binary_builds_pep_517_wheel __________________
script = <tests.lib.PipTestEnvironment object at 0x7fe9509f4e20>
data = <tests.lib.TestData object at 0x7fe9509f4640>, with_wheel = None
def test_install_no_binary_builds_pep_517_wheel(script, data, with_wheel):
to_install = data.packages.joinpath('pep517_setup_and_pyproject')
> res = script.pip(
'install', '--no-binary=:all:', '-f', data.find_links, to_install
)
tests/functional/test_install.py:1279:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.lib.PipTestEnvironment object at 0x7fe9509f4e20>
args = ('python', '-m', 'pip', 'install', '--no-binary=:all:', '-f', ...)
kw = {'expect_stderr': True}
cwd = Path('/tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/scratch')
run_from = None, allow_stderr_error = False, allow_stderr_warning = False
expect_error = None
def run(self, *args, **kw):
"""
:param allow_stderr_error: whether a logged error is allowed in
stderr. Passing True for this argument implies
`allow_stderr_warning` since warnings are weaker than errors.
:param allow_stderr_warning: whether a logged warning (or
deprecation message) is allowed in stderr.
:param expect_error: if False (the default), asserts that the command
exits with 0. Otherwise, asserts that the command exits with a
non-zero exit code. Passing True also implies allow_stderr_error
and allow_stderr_warning.
:param expect_stderr: whether to allow warnings in stderr (equivalent
to `allow_stderr_warning`). This argument is an abbreviated
version of `allow_stderr_warning` and is also kept for backwards
compatibility.
"""
if self.verbose:
print('>> running %s %s' % (args, kw))
cwd = kw.pop('cwd', None)
run_from = kw.pop('run_from', None)
assert not cwd or not run_from, "Don't use run_from; it's going away"
cwd = cwd or run_from or self.cwd
if sys.platform == 'win32':
# Partial fix for ScriptTest.run using `shell=True` on Windows.
args = [str(a).replace('^', '^^').replace('&', '^&') for a in args]
# Remove `allow_stderr_error` and `allow_stderr_warning` before
# calling run() because PipTestEnvironment doesn't support them.
allow_stderr_error = kw.pop('allow_stderr_error', None)
allow_stderr_warning = kw.pop('allow_stderr_warning', None)
# Propagate default values.
expect_error = kw.get('expect_error')
if expect_error:
# Then default to allowing logged errors.
if allow_stderr_error is not None and not allow_stderr_error:
raise RuntimeError(
'cannot pass allow_stderr_error=False with '
'expect_error=True'
)
allow_stderr_error = True
elif kw.get('expect_stderr'):
# Then default to allowing logged warnings.
if allow_stderr_warning is not None and not allow_stderr_warning:
raise RuntimeError(
'cannot pass allow_stderr_warning=False with '
'expect_stderr=True'
)
allow_stderr_warning = True
if allow_stderr_error:
if allow_stderr_warning is not None and not allow_stderr_warning:
raise RuntimeError(
'cannot pass allow_stderr_warning=False with '
'allow_stderr_error=True'
)
# Default values if not set.
if allow_stderr_error is None:
allow_stderr_error = False
if allow_stderr_warning is None:
allow_stderr_warning = allow_stderr_error
# Pass expect_stderr=True to allow any stderr. We do this because
# we do our checking of stderr further on in check_stderr().
kw['expect_stderr'] = True
> result = super(PipTestEnvironment, self).run(cwd=cwd, *args, **kw)
E AssertionError: Script returned code: 1
tests/lib/__init__.py:586: AssertionError
----------------------------- Captured stdout call -----------------------------
Script result: python -m pip install --no-binary=:all: -f file:///tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/data/packages /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/data/packages/pep517_setup_and_pyproject
return code: 1
-- stderr: --------------------
ERROR: Command errored out with exit status 1:
command: /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/venv/bin/python /builddir/build/BUILDROOT/python-pip-19.3.1-1.fc32.noarch/usr/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-build-env-ntp1m4dh/overlay --no-warn-script-location --no-binary :all: --only-binary :none: -i https://pypi.org/simple --find-links file:///tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/data/packages -- setuptools
cwd: None
Complete output (28 lines):
Looking in links: file:///tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/data/packages
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7234ef1e50>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7234e92040>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7234e921c0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7234e92340>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f7234e924c0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/setuptools/
Processing /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/data/packages/setuptools-0.9.6.tar.gz
ERROR: Command errored out with exit status 1:
command: /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/venv/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/setup.py'"'"'; __file__='"'"'/tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/pip-egg-info
cwd: /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/
Complete output (15 lines):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/setuptools/__init__.py", line 2, in <module>
from setuptools.extension import Extension, Library
File "/tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/setuptools/extension.py", line 5, in <module>
from setuptools.dist import _get_unpatched
File "/tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/setuptools/dist.py", line 7, in <module>
from setuptools.command.install import install
File "/tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/setuptools/command/__init__.py", line 8, in <module>
from setuptools.command import install_scripts
File "/tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/setuptools/command/install_scripts.py", line 3, in <module>
from pkg_resources import Distribution, PathMetadata, ensure_directory
File "/tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-install-b_6lf4z6/setuptools/pkg_resources.py", line 1545, in <module>
register_loader_type(importlib_bootstrap.SourceFileLoader, DefaultProvider)
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader'
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
----------------------------------------
ERROR: Command errored out with exit status 1: /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/venv/bin/python /builddir/build/BUILDROOT/python-pip-19.3.1-1.fc32.noarch/usr/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/workspace/tmp/pip-build-env-ntp1m4dh/overlay --no-warn-script-location --no-binary :all: --only-binary :none: -i https://pypi.org/simple --find-links file:///tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/data/packages -- setuptools Check the logs for full command output.
-- stdout: --------------------
Looking in links: file:///tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/data/packages
Processing /tmp/pytest-of-mockbuild/pytest-0/test_install_no_binary_builds_0/data/packages/pep517_setup_and_pyproject
Installing build dependencies: started
Installing build dependencies: finished with status 'error'
_______________________ test_config_file_override_stack ________________________
script = <tests.lib.PipTestEnvironment object at 0x7fe950d9b7f0>
virtualenv = <VirtualEnvironment /tmp/pytest-of-mockbuild/pytest-0/test_config_file_override_stac0/workspace/venv>
def test_config_file_override_stack(script, virtualenv):
"""
Test config files (global, overriding a global config with a
local, overriding all with a command line flag).
"""
fd, config_file = tempfile.mkstemp('-pip.cfg', 'test-')
try:
> _test_config_file_override_stack(script, virtualenv, config_file)
tests/functional/test_install_config.py:144:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/functional/test_install_config.py:172: in _test_config_file_override_stack
result = script.pip(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.lib.PipTestEnvironment object at 0x7fe950d9b7f0>
args = ('python', '-m', 'pip', 'install', '-vvv', '--index-url', ...)
kw = {'expect_stderr': True}
cwd = Path('/tmp/pytest-of-mockbuild/pytest-0/test_config_file_override_stac0/workspace/scratch')
run_from = None, allow_stderr_error = False, allow_stderr_warning = False
expect_error = None
def run(self, *args, **kw):
"""
:param allow_stderr_error: whether a logged error is allowed in
stderr. Passing True for this argument implies
`allow_stderr_warning` since warnings are weaker than errors.
:param allow_stderr_warning: whether a logged warning (or
deprecation message) is allowed in stderr.
:param expect_error: if False (the default), asserts that the command
exits with 0. Otherwise, asserts that the command exits with a
non-zero exit code. Passing True also implies allow_stderr_error
and allow_stderr_warning.
:param expect_stderr: whether to allow warnings in stderr (equivalent
to `allow_stderr_warning`). This argument is an abbreviated
version of `allow_stderr_warning` and is also kept for backwards
compatibility.
"""
if self.verbose:
print('>> running %s %s' % (args, kw))
cwd = kw.pop('cwd', None)
run_from = kw.pop('run_from', None)
assert not cwd or not run_from, "Don't use run_from; it's going away"
cwd = cwd or run_from or self.cwd
if sys.platform == 'win32':
# Partial fix for ScriptTest.run using `shell=True` on Windows.
args = [str(a).replace('^', '^^').replace('&', '^&') for a in args]
# Remove `allow_stderr_error` and `allow_stderr_warning` before
# calling run() because PipTestEnvironment doesn't support them.
allow_stderr_error = kw.pop('allow_stderr_error', None)
allow_stderr_warning = kw.pop('allow_stderr_warning', None)
# Propagate default values.
expect_error = kw.get('expect_error')
if expect_error:
# Then default to allowing logged errors.
if allow_stderr_error is not None and not allow_stderr_error:
raise RuntimeError(
'cannot pass allow_stderr_error=False with '
'expect_error=True'
)
allow_stderr_error = True
elif kw.get('expect_stderr'):
# Then default to allowing logged warnings.
if allow_stderr_warning is not None and not allow_stderr_warning:
raise RuntimeError(
'cannot pass allow_stderr_warning=False with '
'expect_stderr=True'
)
allow_stderr_warning = True
if allow_stderr_error:
if allow_stderr_warning is not None and not allow_stderr_warning:
raise RuntimeError(
'cannot pass allow_stderr_warning=False with '
'allow_stderr_error=True'
)
# Default values if not set.
if allow_stderr_error is None:
allow_stderr_error = False
if allow_stderr_warning is None:
allow_stderr_warning = allow_stderr_error
# Pass expect_stderr=True to allow any stderr. We do this because
# we do our checking of stderr further on in check_stderr().
kw['expect_stderr'] = True
> result = super(PipTestEnvironment, self).run(cwd=cwd, *args, **kw)
E AssertionError: Script returned code: 1
tests/lib/__init__.py:586: AssertionError
----------------------------- Captured stdout call -----------------------------
Script result: python -m pip install -vvv --index-url https://pypi.org/simple/ INITools
return code: 1
-- stderr: --------------------
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f9669c3d8b0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f9669c3da60>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f9669c3dbe0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f9669c3dd60>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f966900f490>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
ERROR: Could not find a version that satisfies the requirement INITools (from versions: none)
ERROR: No matching distribution found for INITools
-- stdout: --------------------
Created temporary directory: /tmp/pytest-of-mockbuild/pytest-0/test_config_file_override_stac0/workspace/tmp/pip-ephem-wheel-cache-6gj33ens
Created temporary directory: /tmp/pytest-of-mockbuild/pytest-0/test_config_file_override_stac0/workspace/tmp/pip-req-tracker-s7_2cwgc
Created requirements tracker '/tmp/pytest-of-mockbuild/pytest-0/test_config_file_override_stac0/workspace/tmp/pip-req-tracker-s7_2cwgc'
Created temporary directory: /tmp/pytest-of-mockbuild/pytest-0/test_config_file_override_stac0/workspace/tmp/pip-install-_91mh3df
Looking in indexes: https://pypi.org/simple/
1 location(s) to search for versions of INITools:
* https://pypi.org/simple/initools/
Getting page https://pypi.org/simple/initools/
Found index url https://pypi.org/simple/
Looking up "https://pypi.org/simple/initools/" in the cache
Request header has "max_age" as 0, cache bypassed
Starting new HTTPS connection (1): pypi.org:443
Incremented Retry for (url='/simple/initools/'): Retry(total=4, connect=None, read=None, redirect=None, status=None)
Starting new HTTPS connection (2): pypi.org:443
Incremented Retry for (url='/simple/initools/'): Retry(total=3, connect=None, read=None, redirect=None, status=None)
Starting new HTTPS connection (3): pypi.org:443
Incremented Retry for (url='/simple/initools/'): Retry(total=2, connect=None, read=None, redirect=None, status=None)
Starting new HTTPS connection (4): pypi.org:443
Incremented Retry for (url='/simple/initools/'): Retry(total=1, connect=None, read=None, redirect=None, status=None)
Starting new HTTPS connection (5): pypi.org:443
Incremented Retry for (url='/simple/initools/'): Retry(total=0, connect=None, read=None, redirect=None, status=None)
Starting new HTTPS connection (6): pypi.org:443
Could not fetch URL https://pypi.org/simple/initools/: connection error: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/initools/ (Caused by NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7f9669c15b50>: Failed to establish a new connection: [Errno -2] Name or service not known')) - skipping
Given no hashes to check 0 links for project 'INITools': discarding no candidates
Cleaning up...
Removed build tracker '/tmp/pytest-of-mockbuild/pytest-0/test_config_file_override_stac0/workspace/tmp/pip-req-tracker-s7_2cwgc'
Exception information:
Traceback (most recent call last):
File "/builddir/build/BUILDROOT/python-pip-19.3.1-1.fc32.noarch/usr/lib/python3.8/site-packages/pip/_internal/cli/base_command.py", line 153, in _main
status = self.run(options, args)
File "/builddir/build/BUILDROOT/python-pip-19.3.1-1.fc32.noarch/usr/lib/python3.8/site-packages/pip/_internal/commands/install.py", line 401, in run
resolver.resolve(requirement_set)
File "/builddir/build/BUILDROOT/python-pip-19.3.1-1.fc32.noarch/usr/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py", line 202, in resolve
self._resolve_one(requirement_set, req)
File "/builddir/build/BUILDROOT/python-pip-19.3.1-1.fc32.noarch/usr/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py", line 368, in _resolve_one
abstract_dist = self._get_abstract_dist_for(req_to_install)
File "/builddir/build/BUILDROOT/python-pip-19.3.1-1.fc32.noarch/usr/lib/python3.8/site-packages/pip/_internal/legacy_resolve.py", line 314, in _get_abstract_dist_for
req.populate_link(self.finder, upgrade_allowed, self.require_hashes)
File "/builddir/build/BUILDROOT/python-pip-19.3.1-1.fc32.noarch/usr/lib/python3.8/site-packages/pip/_internal/req/req_install.py", line 226, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/builddir/build/BUILDROOT/python-pip-19.3.1-1.fc32.noarch/usr/lib/python3.8/site-packages/pip/_internal/index.py", line 905, in find_requirement
raise DistributionNotFound(
pip._internal.exceptions.DistributionNotFound: No matching distribution found for INITools
_______________________ test_no_upgrade_unless_requested _______________________
script = <tests.lib.PipTestEnvironment object at 0x7fe950d86070>
def test_no_upgrade_unless_requested(script):
"""
No upgrade if not specifically requested.
"""
> script.pip('install', 'INITools==0.1')
tests/functional/test_install_upgrade.py:16:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.lib.PipTestEnvironment object at 0x7fe950d86070>
args = ('python', '-m', 'pip', 'install', 'INITools==0.1')
kw = {'expect_stderr': True}
cwd = Path('/tmp/pytest-of-mockbuild/pytest-0/test_no_upgrade_unless_request0/workspace/scratch')
run_from = None, allow_stderr_error = False, allow_stderr_warning = False
expect_error = None
def run(self, *args, **kw):
"""
:param allow_stderr_error: whether a logged error is allowed in
stderr. Passing True for this argument implies
`allow_stderr_warning` since warnings are weaker than errors.
:param allow_stderr_warning: whether a logged warning (or
deprecation message) is allowed in stderr.
:param expect_error: if False (the default), asserts that the command
exits with 0. Otherwise, asserts that the command exits with a
non-zero exit code. Passing True also implies allow_stderr_error
and allow_stderr_warning.
:param expect_stderr: whether to allow warnings in stderr (equivalent
to `allow_stderr_warning`). This argument is an abbreviated
version of `allow_stderr_warning` and is also kept for backwards
compatibility.
"""
if self.verbose:
print('>> running %s %s' % (args, kw))
cwd = kw.pop('cwd', None)
run_from = kw.pop('run_from', None)
assert not cwd or not run_from, "Don't use run_from; it's going away"
cwd = cwd or run_from or self.cwd
if sys.platform == 'win32':
# Partial fix for ScriptTest.run using `shell=True` on Windows.
args = [str(a).replace('^', '^^').replace('&', '^&') for a in args]
# Remove `allow_stderr_error` and `allow_stderr_warning` before
# calling run() because PipTestEnvironment doesn't support them.
allow_stderr_error = kw.pop('allow_stderr_error', None)
allow_stderr_warning = kw.pop('allow_stderr_warning', None)
# Propagate default values.
expect_error = kw.get('expect_error')
if expect_error:
# Then default to allowing logged errors.
if allow_stderr_error is not None and not allow_stderr_error:
raise RuntimeError(
'cannot pass allow_stderr_error=False with '
'expect_error=True'
)
allow_stderr_error = True
elif kw.get('expect_stderr'):
# Then default to allowing logged warnings.
if allow_stderr_warning is not None and not allow_stderr_warning:
raise RuntimeError(
'cannot pass allow_stderr_warning=False with '
'expect_stderr=True'
)
allow_stderr_warning = True
if allow_stderr_error:
if allow_stderr_warning is not None and not allow_stderr_warning:
raise RuntimeError(
'cannot pass allow_stderr_warning=False with '
'allow_stderr_error=True'
)
# Default values if not set.
if allow_stderr_error is None:
allow_stderr_error = False
if allow_stderr_warning is None:
allow_stderr_warning = allow_stderr_error
# Pass expect_stderr=True to allow any stderr. We do this because
# we do our checking of stderr further on in check_stderr().
kw['expect_stderr'] = True
> result = super(PipTestEnvironment, self).run(cwd=cwd, *args, **kw)
E AssertionError: Script returned code: 1
tests/lib/__init__.py:586: AssertionError
----------------------------- Captured stdout call -----------------------------
Script result: python -m pip install INITools==0.1
return code: 1
-- stderr: --------------------
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fd66cc36700>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fd66cc36c40>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fd66cc36dc0>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fd66cc36f40>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.VerifiedHTTPSConnection object at 0x7fd66be48100>: Failed to establish a new connection: [Errno -2] Name or service not known')': /simple/initools/
ERROR: Could not find a version that satisfies the requirement INITools==0.1 (from versions: none)
ERROR: No matching distribution found for INITools==0.1
---
tests/functional/test_freeze.py | 3 +++
tests/functional/test_install.py | 1 +
tests/functional/test_install_config.py | 1 +
tests/functional/test_install_upgrade.py | 1 +
4 files changed, 6 insertions(+)
diff --git a/tests/functional/test_freeze.py b/tests/functional/test_freeze.py
index 546a482..aabb0ca 100644
--- a/tests/functional/test_freeze.py
+++ b/tests/functional/test_freeze.py
@@ -705,6 +705,7 @@ def test_freeze_user(script, virtualenv, data):
assert 'simple2' not in result.stdout
+@pytest.mark.network
def test_freeze_path(tmpdir, script, data):
"""
Test freeze with --path.
@@ -718,6 +719,7 @@ def test_freeze_path(tmpdir, script, data):
_check_output(result.stdout, expected)
+@pytest.mark.network
def test_freeze_path_exclude_user(tmpdir, script, data):
"""
Test freeze with --path and make sure packages from --user are not picked
@@ -739,6 +741,7 @@ def test_freeze_path_exclude_user(tmpdir, script, data):
_check_output(result.stdout, expected)
+@pytest.mark.network
def test_freeze_path_multiple(tmpdir, script, data):
"""
Test freeze with multiple --path arguments.
diff --git a/tests/functional/test_install.py b/tests/functional/test_install.py
index 0bea054..b816df6 100644
--- a/tests/functional/test_install.py
+++ b/tests/functional/test_install.py
@@ -1274,6 +1274,7 @@ def test_install_no_binary_disables_building_wheels(script, data, with_wheel):
assert "Running setup.py install for upper" in str(res), str(res)
+@pytest.mark.network
def test_install_no_binary_builds_pep_517_wheel(script, data, with_wheel):
to_install = data.packages.joinpath('pep517_setup_and_pyproject')
res = script.pip(
diff --git a/tests/functional/test_install_config.py b/tests/functional/test_install_config.py
index bcf83f1..c9c60a2 100644
--- a/tests/functional/test_install_config.py
+++ b/tests/functional/test_install_config.py
@@ -133,6 +133,7 @@ def test_command_line_appends_correctly(script, data):
), 'stdout: {}'.format(result.stdout)
+@pytest.mark.network
def test_config_file_override_stack(script, virtualenv):
"""
Test config files (global, overriding a global config with a
diff --git a/tests/functional/test_install_upgrade.py b/tests/functional/test_install_upgrade.py
index 36b518b..c34a961 100644
--- a/tests/functional/test_install_upgrade.py
+++ b/tests/functional/test_install_upgrade.py
@@ -8,6 +8,7 @@ from tests.lib import assert_all_changes, pyversion
from tests.lib.local_repos import local_checkout
+@pytest.mark.network
def test_no_upgrade_unless_requested(script):
"""
No upgrade if not specifically requested.
--
2.20.1

View File

@ -1,72 +0,0 @@
From 7c36cb21910b415e0eb171d0f6c4dbf72382fdaf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
Date: Tue, 10 Mar 2020 11:03:22 +0100
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.
---
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 3aa8a46..0ec017b 100755
--- a/src/pip/_internal/__init__.py
+++ b/src/pip/_internal/__init__.py
@@ -15,4 +15,4 @@ def main(args=None):
"""
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 befd01c..d6f3632 100644
--- a/src/pip/_internal/utils/entrypoints.py
+++ b/src/pip/_internal/utils/entrypoints.py
@@ -7,7 +7,7 @@ if MYPY_CHECK_RUNNING:
from typing import Optional, List
-def _wrapper(args=None):
+def _wrapper(args=None, _nowarn=False):
# type: (Optional[List[str]]) -> int
"""Central wrapper for all old entrypoints.
@@ -20,12 +20,13 @@ def _wrapper(args=None):
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 e416315..7f57f67 100644
--- a/tests/functional/test_cli.py
+++ b/tests/functional/test_cli.py
@@ -31,4 +31,5 @@ def test_entrypoints_work(entrypoint, script):
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.24.1

View File

@ -1,27 +1,20 @@
--- /usr/bin/pip3 2019-11-12 17:37:34.793131862 +0100 --- /usr/bin/pip3 2018-03-29 15:22:13.000000000 +0200
+++ pip3 2019-11-12 17:40:42.014107134 +0100 +++ pip3 2018-05-04 11:49:08.098821010 +0200
@@ -2,7 +2,23 @@ @@ -4,7 +4,16 @@
# -*- coding: utf-8 -*-
import re import re
import sys import sys
-from pip._internal.cli.main import main
+ -from pip._internal import main
+try: +try:
+ from pip._internal.cli.main import main + from pip._internal import main
+except ImportError: +except ImportError:
+ try: + # user has most probably downgraded pip in their home
+ from pip._internal.main import main + # so let them run it anyway until ~/.local/bin makes it in front of the PATH
+ except ImportError: + from pip import main
+ try: +else:
+ # If the user has downgraded pip, the above import will fail. + # user might also upgraded pip...
+ # Let's try older methods of invoking it: + if hasattr(main, 'main'):
+ + main = main.main
+ # pip 19 uses this
+ from pip._internal import main
+ except ImportError:
+ # older pip versions use this
+ from pip import main
+
if __name__ == '__main__': if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -8,6 +8,9 @@ addFilter(r'(non-executable-script|wrong-script-interpreter) .+/pip/_vendor/appd
addFilter(r'(non-executable-script|wrong-script-interpreter) .+/pip/_vendor/requests/certs.py\b') addFilter(r'(non-executable-script|wrong-script-interpreter) .+/pip/_vendor/requests/certs.py\b')
addFilter(r'(non-executable-script|wrong-script-interpreter) .+/pip/_vendor/chardet/cli/chardetect.py\b') addFilter(r'(non-executable-script|wrong-script-interpreter) .+/pip/_vendor/chardet/cli/chardetect.py\b')
# Already fixed upstream
addFilter(r'(non-executable-script|wrong-script-interpreter) .+/pip/_vendor/certifi/core.py\b')
# We ship README with the main package but not with the wheel # We ship README with the main package but not with the wheel
addFilter(r'python-pip-wheel.noarch: W: no-documentation') addFilter(r'python-pip-wheel.noarch: W: no-documentation')

View File

@ -1,56 +1,62 @@
%bcond_with bootstrap
%bcond_without tests %bcond_without tests
%bcond_without python2
%bcond_without doc %bcond_without doc
%global srcname pip %global srcname pip
%global base_version 20.1.1 %global python_wheelname %{srcname}-%{version}-py2.py3-none-any.whl
%global upstream_version %{base_version}%{?prerel}
%global python_wheelname %{srcname}-%{upstream_version}-py2.py3-none-any.whl
%global python_wheeldir %{_datadir}/python-wheels %global python_wheeldir %{_datadir}/python-wheels
%if %{with doc} %if %{with doc}
%global pypa_theme_commit_hash d2e63fbfc62af3b7050f619b2f5bb8658985b931 %global pypa_theme_commit_hash d2e63fbfc62af3b7050f619b2f5bb8658985b931
%endif %endif
%global bashcompdir %(pkg-config --variable=completionsdir bash-completion 2>/dev/null) # 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} Name: python-%{srcname}
# When updating, update the bundled libraries versions bellow! # When updating, update the bundled libraries versions bellow!
# You can use vendor_meta.sh in the dist git repo # You can use vendor_meta.sh in the dist git repo
Version: %{base_version}%{?prerel:~%{prerel}} Version: 19.0.3
Release: 6%{?dist} Release: 7%{?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.
# Here is the list of the libraries with corresponding licenses: # Here is the list of the libraries with corresponding licenses:
# appdirs: MIT # appdirs: MIT
# certifi: MPLv2.0
# chardet: LGPLv2
# colorama: BSD
# CacheControl: ASL 2.0
# contextlib2: Python
# distlib: Python # distlib: Python
# distro: ASL 2.0 # distro: ASL 2.0
# html5lib: MIT # html5lib: MIT
# idna: BSD # six: MIT
# colorama: BSD
# CacheControl: ASL 2.0
# msgpack-python: ASL 2.0
# lockfile: MIT
# progress: ISC
# ipaddress: Python # ipaddress: Python
# msgpack: ASL 2.0
# packaging: ASL 2.0 or BSD # packaging: ASL 2.0 or BSD
# pep517: MIT # pep517: MIT
# progress: ISC
# pyparsing: MIT # pyparsing: MIT
# pytoml: MIT # pytoml: MIT
# requests: ASL 2.0
# retrying: ASL 2.0 # retrying: ASL 2.0
# setuptools: MIT # requests: ASL 2.0
# six: MIT # chardet: LGPLv2
# idna: BSD
# urllib3: MIT # urllib3: MIT
# certifi: MPLv2.0
# rfc3986: ASL 2.0
# setuptools: MIT
# webencodings: BSD # webencodings: BSD
License: MIT and Python and ASL 2.0 and BSD and ISC and LGPLv2 and MPLv2.0 and (ASL 2.0 or BSD) License: MIT and Python and ASL 2.0 and BSD and ISC and LGPLv2 and MPLv2.0 and (ASL 2.0 or BSD)
URL: https://pip.pypa.io/ URL: https://pip.pypa.io/
Source0: https://github.com/pypa/pip/archive/%{upstream_version}/%{srcname}-%{upstream_version}.tar.gz Source0: https://github.com/pypa/pip/archive/%{version}/%{srcname}-%{version}.tar.gz
BuildArch: noarch BuildArch: noarch
@ -68,6 +74,10 @@ Source1: https://github.com/pypa/pypa-docs-theme/archive/%{pypa_theme_com
Source2: https://github.com/python/python-docs-theme/archive/2018.2.tar.gz Source2: https://github.com/python/python-docs-theme/archive/2018.2.tar.gz
%endif %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 # Downstream only patch
# Emit a warning to the user if pip install is run with root privileges # Emit a warning to the user if pip install is run with root privileges
# Issue upstream: https://github.com/pypa/pip/issues/4288 # Issue upstream: https://github.com/pypa/pip/issues/4288
@ -85,16 +95,30 @@ Patch3: remove-existing-dist-only-if-path-conflicts.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=1655253 # https://bugzilla.redhat.com/show_bug.cgi?id=1655253
Patch4: dummy-certifi.patch Patch4: dummy-certifi.patch
# Don't warn the user about pip._internal.main() entrypoint #Patch5 intentionally skipped, not present in this branch
# 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.
Patch5: nowarn-pip._internal.main.patch
# Backport: Update tests to be endian safe # Make pip compatible with Python 3.9, backported from pip 19.2+
# This updates `test_path_to_display` and `test_str_to_display__encoding` # https://github.com/pypa/pip/pull/6728
# to use the endian safe expected result instead of the hardcoded one. Patch6: python39.patch
# This fixes https://github.com/pypa/pip/issues/7921
Patch6: https://github.com/pypa/pip/commit/b30dd1e04e.patch # Upgrade urllib3 to 1.25.3
# This bundles rfc3986
# https://github.com/pypa/pip/commit/0d620c4a03a8b3765ec45785299244e1a494d750
# CVE-2019-11324: Certification mishandle when error should be thrown
# https://bugzilla.redhat.com/show_bug.cgi?id=1774595
# CVE-2019-11236: CRLF injection due to not encoding the '\r\n' sequence
# https://bugzilla.redhat.com/show_bug.cgi?id=1775363
Patch7: urllib3-1.25.3.patch
# Upgrade requests to 2.22.0 (needed for urllib3 1.25.3)
# https://github.com/pypa/pip/commit/8e8d28dd8ecc9226ea4e0f75d54151df90f4d78e
Patch8: requests-2.22.0.patch
# Allow setting $TMPDIR to $PWD/... during pip wheel
# This is needed to have proper debugsource packages with pyproject-rpm-macros
# https://bugzilla.redhat.com/show_bug.cgi?id=1806625
# Backported from https://github.com/pypa/pip/pull/7873
Patch9: 7873.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
@ -113,10 +137,6 @@ Patch6: https://github.com/pypa/pip/commit/b30dd1e04e.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=1767212 # https://bugzilla.redhat.com/show_bug.cgi?id=1767212
# WARNING: /usr/bin/pip* are entrypoints, this cannot be applied in %%prep! # 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 # %%patch10 doesn't work outside of %%prep, so we add it as a source
# Note that since pip 20, old main() import paths are preserved for backwards
# compatibility: https://github.com/pypa/pip/issues/7498
# Meaning we don't need to update any of the older pips to support 20+
# We also don't need to update Pythons to use new import path in ensurepip
Source10: pip-allow-different-versions.patch Source10: pip-allow-different-versions.patch
%description %description
@ -128,32 +148,31 @@ Packages" or "Pip Installs Python".
# Virtual provides for the packages bundled by pip. # Virtual provides for the packages bundled by pip.
# You can generate it with: # You can find the versions in pip/_vendor/vendor.txt file.
# %%{_rpmconfigdir}/pythonbundles.py --namespace 'python%%{1}dist' src/pip/_vendor/vendor.txt
%global bundled() %{expand: %global bundled() %{expand:
Provides: bundled(python%{1}dist(appdirs)) = 1.4.3 Provides: bundled(python%{1}dist(appdirs)) = 1.4.3
Provides: bundled(python%{1}dist(cachecontrol)) = 0.12.6 Provides: bundled(python%{1}dist(CacheControl)) = 0.12.5
Provides: bundled(python%{1}dist(certifi)) = 2020.4.5.1 Provides: bundled(python%{1}dist(certifi)) = 2018.11.29
Provides: bundled(python%{1}dist(chardet)) = 3.0.4 Provides: bundled(python%{1}dist(chardet)) = 3.0.4
Provides: bundled(python%{1}dist(colorama)) = 0.4.3 Provides: bundled(python%{1}dist(colorama)) = 0.4.1
Provides: bundled(python%{1}dist(contextlib2)) = 0.6^post1 Provides: bundled(python%{1}dist(distlib)) = 0.2.8
Provides: bundled(python%{1}dist(distlib)) = 0.3 Provides: bundled(python%{1}dist(distro)) = 1.3.0
Provides: bundled(python%{1}dist(distro)) = 1.5
Provides: bundled(python%{1}dist(html5lib)) = 1.0.1 Provides: bundled(python%{1}dist(html5lib)) = 1.0.1
Provides: bundled(python%{1}dist(idna)) = 2.9 Provides: bundled(python%{1}dist(idna)) = 2.8
Provides: bundled(python%{1}dist(ipaddress)) = 1.0.23 Provides: bundled(python%{1}dist(ipaddress)) = 1.0.22
Provides: bundled(python%{1}dist(msgpack)) = 1 Provides: bundled(python%{1}dist(lockfile)) = 0.12.2
Provides: bundled(python%{1}dist(packaging)) = 20.3 Provides: bundled(python%{1}dist(msgpack)) = 0.5.6
Provides: bundled(python%{1}dist(pep517)) = 0.8.2 Provides: bundled(python%{1}dist(packaging)) = 19.0
Provides: bundled(python%{1}dist(progress)) = 1.5 Provides: bundled(python%{1}dist(pep517)) = 0.5.0
Provides: bundled(python%{1}dist(pyparsing)) = 2.4.7 Provides: bundled(python%{1}dist(progress)) = 1.4
Provides: bundled(python%{1}dist(requests)) = 2.23 Provides: bundled(python%{1}dist(pyparsing)) = 2.3.1
Provides: bundled(python%{1}dist(resolvelib)) = 0.3 Provides: bundled(python%{1}dist(pytoml)) = 0.1.20
Provides: bundled(python%{1}dist(requests)) = 2.22.0
Provides: bundled(python%{1}dist(retrying)) = 1.3.3 Provides: bundled(python%{1}dist(retrying)) = 1.3.3
Provides: bundled(python%{1}dist(setuptools)) = 44 Provides: bundled(python%{1}dist(setuptools)) = 40.6.3
Provides: bundled(python%{1}dist(six)) = 1.14 Provides: bundled(python%{1}dist(six)) = 1.12.0
Provides: bundled(python%{1}dist(toml)) = 0.10 Provides: bundled(python%{1}dist(urllib3)) = 1.25.3
Provides: bundled(python%{1}dist(urllib3)) = 1.25.8 Provides: bundled(python%{1}dist(rfc3986)) = 1.3.2
Provides: bundled(python%{1}dist(webencodings)) = 0.5.1 Provides: bundled(python%{1}dist(webencodings)) = 0.5.1
} }
@ -174,16 +193,48 @@ Recommends: (libcrypt.so.1 if python%{1}(x86-32))
} }
%if %{with python2}
%package -n python2-%{srcname}
Summary: A tool for installing and managing Python 2 packages
BuildRequires: python2-devel
BuildRequires: python2-setuptools
%if %{with tests}
BuildRequires: python2-mock
BuildRequires: python2-pytest
BuildRequires: python2-pretend
BuildRequires: python2-freezegun
BuildRequires: python2-scripttest
BuildRequires: python2-virtualenv
BuildRequires: python2-pyyaml
%endif
%if %{without bootstrap}
BuildRequires: python2-pip
BuildRequires: python2-wheel
%endif
BuildRequires: ca-certificates
Requires: ca-certificates
Requires: python2-setuptools
# Virtual provides for the packages bundled by pip:
%{bundled 2}
%{?python_provide:%python_provide python2-%{srcname}}
%{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".
%endif # with python2
%package -n python%{python3_pkgversion}-%{srcname} %package -n python%{python3_pkgversion}-%{srcname}
Summary: A tool for installing and managing Python3 packages Summary: A tool for installing and managing Python3 packages
BuildRequires: python%{python3_pkgversion}-devel BuildRequires: python%{python3_pkgversion}-devel
# python3 bootstrap: this is rebuilt before the final build of python3, which
# adds the dependency on python3-rpm-generators, so we require it manually
# Note that the package prefix is always python3-, even if we build for 3.X
# The minimal version is for bundled provides verification script
BuildRequires: python3-rpm-generators >= 11-8
BuildRequires: python%{python3_pkgversion}-setuptools BuildRequires: python%{python3_pkgversion}-setuptools
BuildRequires: bash-completion BuildRequires: bash-completion
%if %{with tests} %if %{with tests}
@ -193,26 +244,20 @@ BuildRequires: python%{python3_pkgversion}-pretend
BuildRequires: python%{python3_pkgversion}-freezegun BuildRequires: python%{python3_pkgversion}-freezegun
BuildRequires: python%{python3_pkgversion}-scripttest BuildRequires: python%{python3_pkgversion}-scripttest
BuildRequires: python%{python3_pkgversion}-virtualenv BuildRequires: python%{python3_pkgversion}-virtualenv
BuildRequires: python%{python3_pkgversion}-werkzeug
BuildRequires: python%{python3_pkgversion}-pyyaml BuildRequires: python%{python3_pkgversion}-pyyaml
%endif %endif
%if %{without bootstrap}
BuildRequires: python%{python3_pkgversion}-pip
BuildRequires: python%{python3_pkgversion}-wheel BuildRequires: python%{python3_pkgversion}-wheel
%endif
BuildRequires: ca-certificates BuildRequires: ca-certificates
Requires: ca-certificates Requires: ca-certificates
Requires: python%{python3_pkgversion}-setuptools
# This was previously required and we keep it recommended because a lot of
# sdists installed via pip will try to import setuptools.
# But pip doesn't actually require setuptools.
# It can install wheels without them and it can build wheels in isolation mode
# (using setuptools/flit/poetry/... installed from PyPI).
# Side note: pip bundles pkg_resources from setuptools for internal usage.
Recommends: python%{python3_pkgversion}-setuptools
# Virtual provides for the packages bundled by pip: # Virtual provides for the packages bundled by pip:
%{bundled 3} %{bundled 3}
Provides: pip = %{version}-%{release} %{?python_provide:%python_provide python%{python3_pkgversion}-%{srcname}}
Conflicts: python-pip < %{version}-%{release}
%{crypt_compat_recommends 3} %{crypt_compat_recommends 3}
@ -233,6 +278,7 @@ A documentation for a tool for installing and managing Python packages
%endif %endif
%if %{without bootstrap}
%package wheel %package wheel
Summary: The pip wheel Summary: The pip wheel
Requires: ca-certificates Requires: ca-certificates
@ -246,9 +292,10 @@ Requires: ca-certificates
%description wheel %description wheel
A Python wheel of pip to use with venv. A Python wheel of pip to use with venv.
%endif
%prep %prep
%setup -q -n %{srcname}-%{upstream_version} %setup -q -n %{srcname}-%{version}
%if %{with doc} %if %{with doc}
pushd docs/html pushd docs/html
@ -259,7 +306,15 @@ mv python-docs-theme-2018.2 python-docs-theme
popd popd
%endif %endif
%autopatch -p1 %patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
# this goes together with patch4 # this goes together with patch4
rm src/pip/_vendor/certifi/*.pem rm src/pip/_vendor/certifi/*.pem
@ -267,14 +322,17 @@ rm src/pip/_vendor/certifi/*.pem
# tests expect wheels in here # tests expect wheels in here
ln -s %{python_wheeldir} tests/data/common_wheels ln -s %{python_wheeldir} tests/data/common_wheels
# Upstream uses a Python 2/3 compatibility library for csv with Python 3 semantics in tests
# We only target Python 3 and csv23 is not (yet) packaged
# As of 20.1b1, this workaround was sufficient to get around the missing dependency
sed -i -e 's/csv23/csv/g' tests/lib/wheel.py
%build %build
%if %{with python2} && %{with bootstrap}
%py2_build
%endif
%if %{without bootstrap}
%py3_build_wheel %py3_build_wheel
%else
%py3_build
%endif
%if %{with doc} %if %{with doc}
export PYTHONPATH=./src/ export PYTHONPATH=./src/
@ -286,204 +344,220 @@ rm -rf docs/build/html/{.doctrees,.buildinfo}
%install %install
# The following is similar to %%py3_install_wheel, but we don't have %if %{without bootstrap}
# /usr/bin/pip yet, so we install using the wheel directly. %py3_install_wheel %{python_wheelname}
# (This is not standard wheel usage, but the pip wheel supports it -- see %else
# pip/__main__.py) %py3_install
%{__python3} dist/%{python_wheelname}/pip install \ %endif
--root %{buildroot} \
--no-deps \ # TODO: we have to remove this by hand now, but it'd be nice if we wouldn't have to
--no-cache-dir \ # (pip install wheel doesn't overwrite)
--no-index \ rm %{buildroot}%{_bindir}/pip
--ignore-installed \
--find-links dist \
'pip==%{upstream_version}'
%if %{with doc} %if %{with doc}
pushd docs/build/man pushd docs/build/man
install -d %{buildroot}%{_mandir}/man1 install -d %{buildroot}%{_mandir}/man1
for MAN in *1; do for MAN in *1; do
%if %{with python2}
install -pm0644 $MAN %{buildroot}%{_mandir}/man1/$MAN install -pm0644 $MAN %{buildroot}%{_mandir}/man1/$MAN
for pip in "pip3" "pip-3" "pip%{python3_version}" "pip-%{python3_version}"; do for pip in "pip2" "pip-2" "pip%{python2_version}" "pip-%{python2_version}"; do
echo ".so $MAN" > %{buildroot}%{_mandir}/man1/${MAN/pip/$pip} echo ".so $MAN" > %{buildroot}%{_mandir}/man1/${MAN/pip/$pip}
done done
%endif
install -pm0644 $MAN %{buildroot}%{_mandir}/man1/${MAN/pip/pip3}
for pip in "pip-3" "pip%{python3_version}" "pip-%{python3_version}"; do
echo ".so ${MAN/pip/pip3}" > %{buildroot}%{_mandir}/man1/${MAN/pip/$pip}
done
done done
popd popd
%endif # with doc
%if %{with python2}
%if %{without bootstrap}
%py2_install_wheel %{python_wheelname}
%else
%py2_install
%endif %endif
%endif # with python2
# before we ln -s anything, we apply Source10 patch to all pips: # 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 for PIP in %{buildroot}%{_bindir}/pip*; do
patch -p1 --no-backup-if-mismatch $PIP < %{SOURCE10} patch -p1 --no-backup-if-mismatch $PIP < %{SOURCE10}
done done
%endif
mkdir -p %{buildroot}%{bashcompdir} mkdir -p %{buildroot}%{bashcompdir}
PYTHONPATH=%{buildroot}%{python3_sitelib} \ %if %{with python2}
PYTHONPATH=%{buildroot}%{python2_sitelib} \
%{buildroot}%{_bindir}/pip completion --bash \ %{buildroot}%{_bindir}/pip completion --bash \
> %{buildroot}%{bashcompdir}/pip
%endif
PYTHONPATH=%{buildroot}%{python3_sitelib} \
%{buildroot}%{_bindir}/pip3 completion --bash \
> %{buildroot}%{bashcompdir}/pip3 > %{buildroot}%{bashcompdir}/pip3
pips2=pip
# Make bash completion apply to all the 5 symlinks we install pips3=pip3
sed -i -e "s/^\\(complete.*\\) pip\$/\\1 pip pip{,-}{3,%{python3_version}}/" \ 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
pip3?*)
pips3="$pips3 $pip"
%if 0%{?bashcomp2}
ln -s pip3 %{buildroot}%{bashcompdir}/$pip
%endif
;;
esac
done
sed -i -e "s/^\\(complete.*\\) pip\$/\\1 $pips3/" \
-e s/_pip_completion/_pip3_completion/ \ -e s/_pip_completion/_pip3_completion/ \
%{buildroot}%{bashcompdir}/pip3 %{buildroot}%{bashcompdir}/pip3
%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 # 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
ln -s ./pip%{python3_version} %{buildroot}%{_bindir}/pip-%{python3_version} ln -s ./pip%{python3_version} %{buildroot}%{_bindir}/pip-%{python3_version}
ln -s ./pip-%{python3_version} %{buildroot}%{_bindir}/pip-3 ln -s ./pip-%{python3_version} %{buildroot}%{_bindir}/pip-3
# Make sure the INSTALLER is not pip, otherwise Patch2 won't work # Make sure the INSTALLER is not pip, otherwise Patch2 won't work
# %%pyproject macros do this for all packages # TODO Maybe we should make all our python packages have this?
echo rpm > %{buildroot}%{python3_sitelib}/pip-%{upstream_version}.dist-info/INSTALLER %if %{without bootstrap}
%if %{with python2}
echo rpm > %{buildroot}%{python2_sitelib}/pip-%{version}.dist-info/INSTALLER
%endif
echo rpm > %{buildroot}%{python3_sitelib}/pip-%{version}.dist-info/INSTALLER
%endif
%if %{without bootstrap}
mkdir -p %{buildroot}%{python_wheeldir} mkdir -p %{buildroot}%{python_wheeldir}
install -p dist/%{python_wheelname} -t %{buildroot}%{python_wheeldir} install -p dist/%{python_wheelname} -t %{buildroot}%{python_wheeldir}
%endif
%if %{with tests} %if %{with tests}
%check %check
# Verify bundled provides are up to date
%{_rpmconfigdir}/pythonbundles.py src/pip/_vendor/vendor.txt --compare-with '%{bundled 3}'
# Upstream tests
# bash completion tests only work from installed package # bash completion tests only work from installed package
# needs unaltered sys.path and we cannot do that in %%check # needs network https://github.com/pypa/pip/pull/6263
# test_pep517_and_build_options # test_constraints_local_editable_install_pep518
# test_config_file_venv_option # test_pep517_wheels_are_not_confused_with_other_files
# test_upgrade_argparse_shadowed
# TODO investigate failures # TODO investigate failures
# test_uninstall_non_local_distutils # test_uninstall_non_local_distutils
# Incompatible with the latest virtualenv # test_venv_modification
# test_from_link_vcs_with_source_dir_obtains_commit_id %global pytest_k 'not completion and not test_constraints_local_editable_install_pep518 and not test_pep517_wheels_are_not_confused_with_other_files and not test_upgrade_argparse_shadowed and not test_uninstall_non_local_distutils and not test_venv_modification'
# test_from_link_vcs_without_source_dir
# test_should_cache_git_sha
pytest_k='not completion and
not test_pep517_and_build_options and
not test_config_file_venv_option and
not test_uninstall_non_local_distutils and
not test_from_link_vcs_with_source_dir_obtains_commit_id and
not test_from_link_vcs_without_source_dir and
not test_should_cache_git_sha'
# --deselect'ed tests are not compatible with the latest virtualenv mkdir _bin
# These files contain almost 500 tests so we should enable them back export PATH="$PWD/_bin:$PATH"
# as soon as pip will be compatible upstream
# https://github.com/pypa/pip/pull/8441 %if %{with python2}
%pytest -m 'not network' -k "$(echo $pytest_k)" \ export PYTHONPATH=%{buildroot}%{python2_sitelib}
--deselect tests/functional --deselect tests/lib/test_lib.py --deselect tests/unit/test_build_env.py ln -s %{buildroot}%{_bindir}/pip2 _bin/pip
%{__python2} -m pytest -m 'not network' -k %{pytest_k}
%endif %endif
export PYTHONPATH=%{buildroot}%{python3_sitelib}
ln -sf %{buildroot}%{_bindir}/pip3 _bin/pip
%{__python3} -m pytest -m 'not network' -k %{pytest_k}
%endif
%if %{with python2}
%files -n python2-%{srcname}
%license LICENSE.txt
%doc README.rst
%if %{with doc}
%{_mandir}/man1/pip.*
%{_mandir}/man1/pip2.*
%{_mandir}/man1/pip-2.*
%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
%files -n python%{python3_pkgversion}-%{srcname} %files -n python%{python3_pkgversion}-%{srcname}
%license LICENSE.txt %license LICENSE.txt
%doc README.rst %doc README.rst
%if %{with doc} %if %{with doc}
%{_mandir}/man1/pip.*
%{_mandir}/man1/pip-*.*
%{_mandir}/man1/pip3.* %{_mandir}/man1/pip3.*
%{_mandir}/man1/pip3-*.* %{_mandir}/man1/pip-3.*
%endif %endif
%{_bindir}/pip
%{_bindir}/pip3 %{_bindir}/pip3
%{_bindir}/pip-3 %{_bindir}/pip-3
%{_bindir}/pip%{python3_version} %{_bindir}/pip%{python3_version}
%{_bindir}/pip-%{python3_version} %{_bindir}/pip-%{python3_version}
%{python3_sitelib}/pip* %{python3_sitelib}/pip*
%dir %{bashcompdir} %dir %{bashcompdir}
%{bashcompdir}/pip3 %{bashcompdir}/pip3*
%if 0%{?bashcomp2}
%dir %(dirname %{bashcompdir})
%endif
%if %{with doc} %if %{with doc}
%files doc %files doc
%license LICENSE.txt %license LICENSE.txt
%doc README.rst %doc README.rst
%doc docs/build/html %doc docs/build/html
%endif %endif # with doc
%if %{without bootstrap}
%files wheel %files wheel
%license LICENSE.txt %license LICENSE.txt
# we own the dir for simplicity # we own the dir for simplicity
%dir %{python_wheeldir}/ %dir %{python_wheeldir}/
%{python_wheeldir}/%{python_wheelname} %{python_wheeldir}/%{python_wheelname}
%endif
%changelog %changelog
* Fri Jul 10 2020 Lumír Balhar <lbalhar@redhat.com> - 20.1.1-6 * Fri Apr 10 2020 Miro Hrončok <mhroncok@redhat.com> - 19.0.3-7
- Do not emit a warning about root privileges when --root is used
* Wed Jul 08 2020 Miro Hrončok <mhroncok@redhat.com> - 20.1.1-5
- Update bundled provides to match 20.1.1
* Tue Jun 16 2020 Lumír Balhar <lbalhar@redhat.com> - 20.1.1-4
- Deselect tests incompatible with the latest virtualenv
* Sun May 24 2020 Miro Hrončok <mhroncok@redhat.com> - 20.1.1-3
- Rebuilt for Python 3.9
* Thu May 21 2020 Miro Hrončok <mhroncok@redhat.com> - 20.1.1-2
- Bootstrap for Python 3.9
* Wed May 20 2020 Tomas Hrnciar <thrnciar@redhat.com> - 20.1.1-1
- Update to 20.1.1
* Wed Apr 29 2020 Tomas Hrnciar <thrnciar@redhat.com> - 20.1-1
- Update to 20.1
* Mon Apr 27 2020 Tomas Hrnciar <thrnciar@redhat.com> - 20.1~b1-1
- Update to 20.1~b1
* Wed Apr 15 2020 Miro Hrončok <mhroncok@redhat.com> - 20.0.2-4
- Only recommend setuptools, don't require them
* Fri Apr 10 2020 Miro Hrončok <mhroncok@redhat.com> - 20.0.2-3
- Allow setting $TMPDIR to $PWD/... during pip wheel (#1806625) - Allow setting $TMPDIR to $PWD/... during pip wheel (#1806625)
* Tue Mar 10 2020 Miro Hrončok <mhroncok@redhat.com> - 20.0.2-2 * Thu Jan 02 2020 Miro Hrončok <mhroncok@redhat.com> - 19.0.3-6
- Don't warn the user about pip._internal.main() entrypoint to fix ensurepip - Upgrade urllib3 to 1.25.3, requests to 2.22.0
- Fix urllib3 CVE-2019-11324 (#1774595)
- Fix urllib3 CVE-2019-11236 (#1775363)
* Mon Mar 02 2020 Miro Hrončok <mhroncok@redhat.com> - 20.0.2-1 * Mon Nov 25 2019 Miro Hrončok <mhroncok@redhat.com> - 19.0.3-5
- Update to 20.0.2 (#1793456) - Make python-pip-wheel work with Python 3.9
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 19.3.1-2 * Mon Nov 11 2019 Miro Hrončok <mhroncok@redhat.com> - 19.0.3-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - Make /usr/bin/pip(2|3) work with user-installed pip 19.3+ (#1767212)
* Mon Nov 04 2019 Tomas Orsava <torsava@redhat.com> - 19.3.1-1 * Mon Jul 15 2019 Petr Viktorin <pviktori@redhat.com> - 19.0.3-3
- Update to 19.3.1 (#1761508)
- Drop upstreamed patch that fixed expected output in test to not break with alpha/beta/rc Python versions
* Wed Oct 30 2019 Miro Hrončok <mhroncok@redhat.com> - 19.2.3-2
- Make /usr/bin/pip(3) work with user-installed pip 19.3+ (#1767212)
* Mon Sep 02 2019 Miro Hrončok <mhroncok@redhat.com> - 19.2.3-1
- Update to 19.2.3 (#1742230)
- Drop patch that should strip path prefixes from RECORD files, the paths are relative
* Wed Aug 21 2019 Petr Viktorin <pviktori@redhat.com> - 19.1.1-8
- Remove python2-pip
- Make pip bootstrap itself, rather than with an extra bootstrap RPM build
* Sat Aug 17 2019 Miro Hrončok <mhroncok@redhat.com> - 19.1.1-7
- Rebuilt for Python 3.8
* Wed Aug 14 2019 Miro Hrončok <mhroncok@redhat.com> - 19.1.1-6
- Bootstrap for Python 3.8
* Wed Aug 14 2019 Miro Hrončok <mhroncok@redhat.com> - 19.1.1-5
- Bootstrap for Python 3.8
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 19.1.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Mon Jul 15 2019 Petr Viktorin <pviktori@redhat.com> - 19.1.1-3
- Recommend libcrypt.so.1 for manylinux1 compatibility - Recommend libcrypt.so.1 for manylinux1 compatibility
- Make /usr/bin/pip Python 3
* Mon Jun 10 2019 Miro Hrončok <mhroncok@redhat.com> - 19.1.1-2 * Mon Jun 10 2019 Miro Hrončok <mhroncok@redhat.com> - 19.0.3-2
- Fix root warning when pip is invoked via python -m pip - Fix root warning when pip is invoked via python -m pip
- Remove a redundant second WARNING prefix form the abovementioned warning
* Wed May 15 2019 Miro Hrončok <mhroncok@redhat.com> - 19.1.1-1
- Update to 19.1.1 (#1706995)
* Thu Apr 25 2019 Miro Hrončok <mhroncok@redhat.com> - 19.1-1
- Update to 19.1 (#1702525)
* Wed Mar 06 2019 Miro Hrončok <mhroncok@redhat.com> - 19.0.3-1 * Wed Mar 06 2019 Miro Hrončok <mhroncok@redhat.com> - 19.0.3-1
- Update to 19.0.3 (#1679277) - Update to 19.0.3 (#1679277)

45
python39.patch Normal file
View File

@ -0,0 +1,45 @@
From ef7ca1472c1fdd085cffb8183b7ce8abbe9e2800 Mon Sep 17 00:00:00 2001
From: Chih-Hsuan Yen <yan12125@gmail.com>
Date: Thu, 18 Jul 2019 12:45:15 +0800
Subject: [PATCH] Add an html5lib patch for Python 3.9 compatibility
The patch is adapted from https://github.com/html5lib/html5lib-python/commit/4f9235752cea29c5a31721440578b430823a1e69
Closes https://github.com/pypa/pip/issues/6407
Closes https://github.com/pypa/pip/issues/6237
---
src/pip/_vendor/html5lib/_trie/_base.py | 5 +++-
src/pip/_vendor/html5lib/treebuilders/dom.py | 5 +++-
4 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/src/pip/_vendor/html5lib/_trie/_base.py b/src/pip/_vendor/html5lib/_trie/_base.py
index a1158bbbf..6b71975f0 100644
--- a/src/pip/_vendor/html5lib/_trie/_base.py
+++ b/src/pip/_vendor/html5lib/_trie/_base.py
@@ -1,6 +1,9 @@
from __future__ import absolute_import, division, unicode_literals
-from collections import Mapping
+try:
+ from collections.abc import Mapping
+except ImportError: # Python 2.7
+ from collections import Mapping
class Trie(Mapping):
diff --git a/src/pip/_vendor/html5lib/treebuilders/dom.py b/src/pip/_vendor/html5lib/treebuilders/dom.py
index dcfac220b..d8b530046 100644
--- a/src/pip/_vendor/html5lib/treebuilders/dom.py
+++ b/src/pip/_vendor/html5lib/treebuilders/dom.py
@@ -1,7 +1,10 @@
from __future__ import absolute_import, division, unicode_literals
-from collections import MutableMapping
+try:
+ from collections.abc import MutableMapping
+except ImportError: # Python 2.7
+ from collections import MutableMapping
from xml.dom import minidom, Node
import weakref

View File

@ -1,55 +1,51 @@
From d381c59fdc15949c4dc293bd92bbccb60289a703 Mon Sep 17 00:00:00 2001 commit b6d5da6796801862eb751a93d507c343af0604d6
From: Tomas Hrnciar <thrnciar@redhat.com> Author: Victor Stinner <vstinner@redhat.com>
Date: Sun, 26 Apr 2020 21:19:03 +0200 Date: Tue Sep 18 17:13:51 2018 +0200
Subject: [PATCH] Prevent removing of the system packages installed under
/usr/lib
when pip install -U is executed. Subject: Prevent removing of the system packages installed under /usr/lib
Resolves: rhbz#1550368 when pip install -U is executed.
Co-Authored-By: Michal Cyprian <m.cyprian@gmail.com> Resolves: rhbz#1550368
Co-Authored-By: Victor Stinner <vstinner@redhat.com>
--- Co-Authored-By: Michal Cyprian <m.cyprian@gmail.com>
src/pip/_internal/req/req_install.py | 3 ++-
src/pip/_internal/resolution/legacy/resolver.py | 5 ++++-
src/pip/_internal/utils/misc.py | 11 +++++++++++
3 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/src/pip/_internal/req/req_install.py b/src/pip/_internal/req/req_install.py diff --git a/src/pip/_internal/req/req_install.py b/src/pip/_internal/req/req_install.py
index 3b28209b..d14217e9 100644 index d21530a..0023a35 100644
--- a/src/pip/_internal/req/req_install.py --- a/src/pip/_internal/req/req_install.py
+++ b/src/pip/_internal/req/req_install.py +++ b/src/pip/_internal/req/req_install.py
@@ -38,6 +38,7 @@ from pip._internal.utils.misc import ( @@ -29,7 +29,7 @@ from pip._internal.utils.hashes import Hashes
ask_path_exists, from pip._internal.utils.logging import indent_log
backup_dir, from pip._internal.utils.misc import (
display_path, _make_build_dir, ask_path_exists, backup_dir, call_subprocess,
+ dist_in_install_path, - display_path, dist_in_site_packages, dist_in_usersite, ensure_dir,
dist_in_site_packages, + display_path, dist_in_install_path, dist_in_site_packages, dist_in_usersite, ensure_dir,
dist_in_usersite, get_installed_version, redact_password_from_url, rmtree,
get_installed_version, )
@@ -444,7 +445,7 @@ class InstallRequirement(object): from pip._internal.utils.packaging import get_metadata
"lack sys.path precedence to {} in {}".format( @@ -411,7 +411,7 @@ class InstallRequirement(object):
existing_dist.project_name, existing_dist.location) "lack sys.path precedence to %s in %s" %
(existing_dist.project_name, existing_dist.location)
) )
- else: - else:
+ elif dist_in_install_path(existing_dist): + elif dist_in_install_path(existing_dist):
self.should_reinstall = True self.conflicts_with = existing_dist
else: return True
if self.editable and self.satisfied_by:
diff --git a/src/pip/_internal/resolution/legacy/resolver.py b/src/pip/_internal/resolution/legacy/resolver.py diff --git a/src/pip/_internal/resolve.py b/src/pip/_internal/resolve.py
index cdb44d19..52e122c6 100644 index 33f572f..88b68e1 100644
--- a/src/pip/_internal/resolution/legacy/resolver.py --- a/src/pip/_internal/resolve.py
+++ b/src/pip/_internal/resolution/legacy/resolver.py +++ b/src/pip/_internal/resolve.py
@@ -33,6 +33,7 @@ from pip._internal.resolution.base import BaseResolver @@ -20,7 +20,7 @@ from pip._internal.exceptions import (
from pip._internal.utils.compatibility_tags import get_supported )
from pip._internal.req.constructors import install_req_from_req_string
from pip._internal.utils.logging import indent_log from pip._internal.utils.logging import indent_log
from pip._internal.utils.misc import dist_in_usersite, normalize_version_info -from pip._internal.utils.misc import dist_in_usersite, ensure_dir
+from pip._internal.utils.misc import dist_in_install_path +from pip._internal.utils.misc import dist_in_install_path, dist_in_usersite, ensure_dir
from pip._internal.utils.packaging import ( from pip._internal.utils.packaging import check_dist_requires_python
check_requires_python, from pip._internal.utils.typing import MYPY_CHECK_RUNNING
get_requires_python,
@@ -203,7 +204,9 @@ class Resolver(BaseResolver): @@ -154,7 +154,9 @@ class Resolver(object):
""" """
# Don't uninstall the conflict if doing a user install and the # Don't uninstall the conflict if doing a user install and the
# conflict is not a user install. # conflict is not a user install.
@ -57,23 +53,24 @@ index cdb44d19..52e122c6 100644
+ if ((not self.use_user_site + if ((not self.use_user_site
+ or dist_in_usersite(req.satisfied_by)) + or dist_in_usersite(req.satisfied_by))
+ and dist_in_install_path(req.satisfied_by)): + and dist_in_install_path(req.satisfied_by)):
req.should_reinstall = True req.conflicts_with = req.satisfied_by
req.satisfied_by = None req.satisfied_by = None
diff --git a/src/pip/_internal/utils/misc.py b/src/pip/_internal/utils/misc.py diff --git a/src/pip/_internal/utils/misc.py b/src/pip/_internal/utils/misc.py
index 09031825..3c064f8f 100644 index 84605ee..0e4ba93 100644
--- a/src/pip/_internal/utils/misc.py --- a/src/pip/_internal/utils/misc.py
+++ b/src/pip/_internal/utils/misc.py +++ b/src/pip/_internal/utils/misc.py
@@ -29,6 +29,7 @@ from pip._vendor.six.moves.urllib.parse import unquote as urllib_unquote @@ -30,7 +30,7 @@ from pip._vendor.six.moves.urllib.parse import unquote as urllib_unquote
from pip import __version__ from pip._internal.exceptions import CommandError, InstallationError
from pip._internal.exceptions import CommandError
from pip._internal.locations import ( from pip._internal.locations import (
+ distutils_scheme, running_under_virtualenv, site_packages, user_site, virtualenv_no_global,
get_major_minor_version, - write_delete_marker_file,
site_packages, + write_delete_marker_file, distutils_scheme,
user_site, )
@@ -400,6 +401,16 @@ def dist_in_site_packages(dist): from pip._internal.utils.compat import (
return dist_location(dist).startswith(normalize_path(site_packages)) WINDOWS, console_to_str, expanduser, stdlib_pkgs,
@@ -355,6 +355,16 @@ def dist_in_site_packages(dist):
).startswith(normalize_path(site_packages))
+def dist_in_install_path(dist): +def dist_in_install_path(dist):
@ -89,7 +86,3 @@ index 09031825..3c064f8f 100644
def dist_is_editable(dist): def dist_is_editable(dist):
# type: (Distribution) -> bool # type: (Distribution) -> bool
""" """
--
2.23.0

91
requests-2.22.0.patch Normal file
View File

@ -0,0 +1,91 @@
From 8e8d28dd8ecc9226ea4e0f75d54151df90f4d78e Mon Sep 17 00:00:00 2001
From: Pradyun Gedam <pradyunsg@gmail.com>
Date: Sat, 20 Jul 2019 09:31:48 +0530
Subject: [PATCH] Upgrade requests to 2.22.0
---
news/requests.vendor | 1 +
src/pip/_vendor/requests/__init__.py | 4 ++--
src/pip/_vendor/requests/__version__.py | 6 +++---
src/pip/_vendor/requests/api.py | 4 ++--
src/pip/_vendor/vendor.txt | 1 +
5 files changed, 9 insertions(+), 7 deletions(-)
create mode 100644 news/requests.vendor
diff --git a/news/requests.vendor b/news/requests.vendor
new file mode 100644
index 0000000000..aac729b0e1
--- /dev/null
+++ b/news/requests.vendor
@@ -0,0 +1 @@
+Upgrade requests to 2.22.0
diff --git a/src/pip/_vendor/requests/__init__.py b/src/pip/_vendor/requests/__init__.py
index 80c4ce1d21..1d30e3e063 100644
--- a/src/pip/_vendor/requests/__init__.py
+++ b/src/pip/_vendor/requests/__init__.py
@@ -57,10 +57,10 @@ def check_compatibility(urllib3_version, chardet_version):
# Check urllib3 for compatibility.
major, minor, patch = urllib3_version # noqa: F811
major, minor, patch = int(major), int(minor), int(patch)
- # urllib3 >= 1.21.1, <= 1.24
+ # urllib3 >= 1.21.1, <= 1.25
assert major == 1
assert minor >= 21
- assert minor <= 24
+ assert minor <= 25
# Check chardet for compatibility.
major, minor, patch = chardet_version.split('.')[:3]
diff --git a/src/pip/_vendor/requests/__version__.py b/src/pip/_vendor/requests/__version__.py
index f5b5d03671..9844f740ab 100644
--- a/src/pip/_vendor/requests/__version__.py
+++ b/src/pip/_vendor/requests/__version__.py
@@ -5,10 +5,10 @@
__title__ = 'requests'
__description__ = 'Python HTTP for Humans.'
__url__ = 'http://python-requests.org'
-__version__ = '2.21.0'
-__build__ = 0x022100
+__version__ = '2.22.0'
+__build__ = 0x022200
__author__ = 'Kenneth Reitz'
__author_email__ = 'me@kennethreitz.org'
__license__ = 'Apache 2.0'
-__copyright__ = 'Copyright 2018 Kenneth Reitz'
+__copyright__ = 'Copyright 2019 Kenneth Reitz'
__cake__ = u'\u2728 \U0001f370 \u2728'
diff --git a/src/pip/_vendor/requests/api.py b/src/pip/_vendor/requests/api.py
index abada96d46..ef71d0759e 100644
--- a/src/pip/_vendor/requests/api.py
+++ b/src/pip/_vendor/requests/api.py
@@ -19,7 +19,7 @@ def request(method, url, **kwargs):
:param method: method for the new :class:`Request` object.
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
- in the body of the :class:`Request`.
+ in the query string for the :class:`Request`.
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
object to send in the body of the :class:`Request`.
:param json: (optional) A JSON serializable Python object to send in the body of the :class:`Request`.
@@ -65,7 +65,7 @@ def get(url, params=None, **kwargs):
:param url: URL for the new :class:`Request` object.
:param params: (optional) Dictionary, list of tuples or bytes to send
- in the body of the :class:`Request`.
+ in the query string for the :class:`Request`.
:param \*\*kwargs: Optional arguments that ``request`` takes.
:return: :class:`Response <Response>` object
:rtype: requests.Response
diff --git a/src/pip/_vendor/vendor.txt b/src/pip/_vendor/vendor.txt
index bcf579515e..e5542fbc5e 100644
--- a/src/pip/_vendor/vendor.txt
+++ b/src/pip/_vendor/vendor.txt
@@ -12,7 +12,7 @@ pep517==0.5.0
progress==1.4
pyparsing==2.3.1
pytoml==0.1.20
-requests==2.21.0
+requests==2.22.0
certifi==2018.11.29
chardet==3.0.4
idna==2.8

1055
skip-network-tests.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,3 @@
SHA512 (pip-20.1.1.tar.gz) = ee7b0345c08fbe0215811d07b4c57c1ceece826871842f6d1c174d82e8eee0ad810aa5413d6763ecd5a513e151792a53c36623ab99d2049555ef2542d32d1658 SHA512 (pip-19.0.3.tar.gz) = f56df1e2fe18eccc4dcba66b0a93a933eb94d12ed0f31d3923662fb85075192674c98bbc00dd48185b1d87cf28a64a6dc321de524e4ccb39a8877b3d5cf578e1
SHA512 (d2e63fbfc62af3b7050f619b2f5bb8658985b931.tar.gz) = fc7b11c5cbf6322469ce2eaca2a8d7eb60b17398d316f7465ab5d3d38dabd00ee22a3da7437a28f6312f0115f77f2df0d8bf0abc671e055eef06356c94283409 SHA512 (d2e63fbfc62af3b7050f619b2f5bb8658985b931.tar.gz) = fc7b11c5cbf6322469ce2eaca2a8d7eb60b17398d316f7465ab5d3d38dabd00ee22a3da7437a28f6312f0115f77f2df0d8bf0abc671e055eef06356c94283409
SHA512 (2018.2.tar.gz) = 4c09c43a70ecb3ca3bc9445b01bf209eb382e41d9c969145696dea38551992ed88fd9b725a1264380f3dbdf8acdaf5ada3ef86b44255cdfbdbe4a01a1630912d SHA512 (2018.2.tar.gz) = 4c09c43a70ecb3ca3bc9445b01bf209eb382e41d9c969145696dea38551992ed88fd9b725a1264380f3dbdf8acdaf5ada3ef86b44255cdfbdbe4a01a1630912d

View File

@ -25,9 +25,9 @@
- smoke38: - smoke38:
dir: python/smoke dir: python/smoke
run: VERSION=3.8 ./venv.sh run: VERSION=3.8 ./venv.sh
- smoke39: - smoke26:
dir: python/smoke dir: python/smoke
run: VERSION=3.9 ./venv.sh run: VERSION=2.6 METHOD=virtualenv TOX=false ./venv.sh
- smoke27: - smoke27:
dir: python/smoke dir: python/smoke
run: VERSION=2.7 METHOD=virtualenv ./venv.sh run: VERSION=2.7 METHOD=virtualenv ./venv.sh
@ -46,9 +46,6 @@
- smoke38_virtualenv: - smoke38_virtualenv:
dir: python/smoke dir: python/smoke
run: VERSION=3.8 METHOD=virtualenv ./venv.sh run: VERSION=3.8 METHOD=virtualenv ./venv.sh
- smoke39_virtualenv:
dir: python/smoke
run: VERSION=3.9 METHOD=virtualenv ./venv.sh
- pipenv: - pipenv:
run: pipenv --three && pipenv install six run: pipenv --three && pipenv install six
- pyproject_pytest: - pyproject_pytest:
@ -66,13 +63,13 @@
required_packages: required_packages:
- gcc - gcc
- virtualenv - virtualenv
- python26
- python27 - python27
- python34 - python34
- python35 - python35
- python36 - python36
- python37 - python37
- python38 - python38
- python39
- python2-devel - python2-devel
- python3-devel - python3-devel
- python3-tox - python3-tox

4621
urllib3-1.25.3.patch Normal file

File diff suppressed because it is too large Load Diff