[pypy-commit] pypy default: Grumble, we must actually not kill duplicates from PYTHONPATH.

arigo noreply at buildbot.pypy.org
Sat Oct 6 13:37:27 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r57805:41121ed0f5c1
Date: 2012-10-06 13:37 +0200
http://bitbucket.org/pypy/pypy/changeset/41121ed0f5c1/

Log:	Grumble, we must actually not kill duplicates from PYTHONPATH.
	setuptools's site.py relies on that.

diff --git a/pypy/translator/goal/app_main.py b/pypy/translator/goal/app_main.py
--- a/pypy/translator/goal/app_main.py
+++ b/pypy/translator/goal/app_main.py
@@ -226,17 +226,18 @@
 def setup_and_fix_paths(ignore_environment=False, **extra):
     import os
     newpath = sys.path[:]
+    del sys.path[:]
+    # first prepend PYTHONPATH
     readenv = not ignore_environment
     path = readenv and os.getenv('PYTHONPATH')
     if path:
-        newpath = path.split(os.pathsep) + newpath
-    # remove duplicates
-    _seen = {}
-    del sys.path[:]
+        sys.path.extend(path.split(os.pathsep))
+    # then add again the original entries, ignoring duplicates
+    _seen = set()
     for dir in newpath:
         if dir not in _seen:
             sys.path.append(dir)
-            _seen[dir] = True
+            _seen.add(dir)
 
 def set_stdio_encodings(ignore_environment):
     import os
diff --git a/pypy/translator/goal/test2/test_app_main.py b/pypy/translator/goal/test2/test_app_main.py
--- a/pypy/translator/goal/test2/test_app_main.py
+++ b/pypy/translator/goal/test2/test_app_main.py
@@ -397,6 +397,15 @@
         finally:
             del os.environ['PYTHONINSPECT_']
 
+    def test_python_path_keeps_duplicates(self):
+        old = os.environ.get('PYTHONPATH', '')
+        try:
+            os.environ['PYTHONPATH'] = 'foobarbaz:foobarbaz'
+            child = self.spawn(['-c', 'import sys; print sys.path'])
+            child.expect(r"\['', 'foobarbaz', 'foobarbaz', ")
+        finally:
+            os.environ['PYTHONPATH'] = old
+
     def test_ignore_python_path(self):
         old = os.environ.get('PYTHONPATH', '')
         try:


More information about the pypy-commit mailing list