[Python-checkins] cpython (merge 3.5 -> 3.6): Fixes #24875: Merged fix from 3.5.

vinay.sajip python-checkins at python.org
Thu Feb 2 14:18:01 EST 2017


https://hg.python.org/cpython/rev/7d4701b4210f
changeset:   106390:7d4701b4210f
branch:      3.6
parent:      106384:2470a5981f6a
parent:      106389:1bf1d36463b4
user:        Vinay Sajip <vinay_sajip at yahoo.co.uk>
date:        Thu Feb 02 19:17:02 2017 +0000
summary:
  Fixes #24875: Merged fix from 3.5.

files:
  Lib/test/test_venv.py |  22 ++++++++++++++--------
  Lib/venv/__init__.py  |   9 +++++++++
  2 files changed, 23 insertions(+), 8 deletions(-)


diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -330,12 +330,7 @@
         else:
             self.assertTrue(os.path.exists(os.devnull))
 
-
-    @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
@@ -369,6 +364,7 @@
                 # 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,
@@ -418,9 +414,19 @@
         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()
 
+    @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()
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -57,6 +57,10 @@
         """
         env_dir = os.path.abspath(env_dir)
         context = self.ensure_directories(env_dir)
+        # See issue 24875. We need system_site_packages to be False
+        # until after pip is installed.
+        true_system_site_packages = self.system_site_packages
+        self.system_site_packages = False
         self.create_configuration(context)
         self.setup_python(context)
         if self.with_pip:
@@ -64,6 +68,11 @@
         if not self.upgrade:
             self.setup_scripts(context)
             self.post_setup(context)
+        if true_system_site_packages:
+            # We had set it to False before, now
+            # restore it and rewrite the configuration
+            self.system_site_packages = True
+            self.create_configuration(context)
 
     def clear_directory(self, path):
         for fn in os.listdir(path):

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list