Fixes #24875: pip can now be installed in a venv with --system-site-packages.

This commit is contained in:
Vinay Sajip 2017-02-02 19:05:19 +00:00
parent a5917d1d15
commit db6322cb8a
2 changed files with 25 additions and 9 deletions

View file

@ -328,13 +328,7 @@ class EnsurePipTest(BaseTest):
with open(os.devnull, "rb") as f:
self.assertEqual(f.read(), b"")
# Requesting pip fails without SSL (http://bugs.python.org/issue19744)
@unittest.skipIf(ssl is None, ensurepip._MISSING_SSL_MESSAGE)
@unittest.skipUnless(threading, 'some dependencies of pip import threading'
' module unconditionally')
# Issue #26610: pip/pep425tags.py requires ctypes
@unittest.skipUnless(ctypes, 'pip requires ctypes')
def test_with_pip(self):
def do_test_with_pip(self, system_site_packages):
rmtree(self.env_dir)
with EnvironmentVarGuard() as envvars:
# pip's cross-version compatibility may trigger deprecation
@ -368,6 +362,7 @@ class EnsurePipTest(BaseTest):
# config in place to ensure we ignore it
try:
self.run_with_capture(venv.create, self.env_dir,
system_site_packages=system_site_packages,
with_pip=True)
except subprocess.CalledProcessError as exc:
# The output this produces can be a little hard to read,
@ -417,9 +412,21 @@ class EnsurePipTest(BaseTest):
out = out.decode("latin-1") # Force to text, prevent decoding errors
self.assertIn("Successfully uninstalled pip", out)
self.assertIn("Successfully uninstalled setuptools", out)
# Check pip is now gone from the virtual environment
self.assert_pip_not_installed()
# Check pip is now gone from the virtual environment. This only
# applies in the system_site_packages=False case, because in the
# other case, pip may still be available in the system site-packages
if not system_site_packages:
self.assert_pip_not_installed()
# Requesting pip fails without SSL (http://bugs.python.org/issue19744)
@unittest.skipIf(ssl is None, ensurepip._MISSING_SSL_MESSAGE)
@unittest.skipUnless(threading, 'some dependencies of pip import threading'
' module unconditionally')
# Issue #26610: pip/pep425tags.py requires ctypes
@unittest.skipUnless(ctypes, 'pip requires ctypes')
def test_with_pip(self):
self.do_test_with_pip(False)
self.do_test_with_pip(True)
if __name__ == "__main__":
unittest.main()