[Python-checkins] bpo-33689: Blank lines in .pth file cause a duplicate sys.path entry (GH-20679)

idomic webhook-mailer at python.org
Sat Sep 19 15:13:37 EDT 2020


https://github.com/python/cpython/commit/0c71a66b53f6ea262aa5a60784c8c625ae0bb98c
commit: 0c71a66b53f6ea262aa5a60784c8c625ae0bb98c
branch: master
author: idomic <michael.ido at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-09-19T22:13:29+03:00
summary:

bpo-33689: Blank lines in .pth file cause a duplicate sys.path entry (GH-20679)

files:
A Misc/NEWS.d/next/Library/2020-06-06-14-09-55.bpo-33689.EFUDH7.rst
M Lib/site.py
M Lib/test/test_site.py

diff --git a/Lib/site.py b/Lib/site.py
index 4c095774729c5..4d3b869fff77a 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -170,6 +170,8 @@ def addpackage(sitedir, name, known_paths):
         for n, line in enumerate(f):
             if line.startswith("#"):
                 continue
+            if line.strip() == "":
+                continue
             try:
                 if line.startswith(("import ", "import\t")):
                     exec(line)
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 97b5c5de95bbc..d3ee68facdbc3 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -161,6 +161,12 @@ def test_addpackage_import_bad_exec(self):
         self.assertRegex(err_out.getvalue(), 'Traceback')
         self.assertRegex(err_out.getvalue(), 'ModuleNotFoundError')
 
+    def test_addpackage_empty_lines(self):
+        # Issue 33689
+        pth_dir, pth_fn = self.make_pth("\n\n  \n\n")
+        known_paths = site.addpackage(pth_dir, pth_fn, set())
+        self.assertEqual(known_paths, set())
+
     def test_addpackage_import_bad_pth_file(self):
         # Issue 5258
         pth_dir, pth_fn = self.make_pth("abc\x00def\n")
@@ -595,7 +601,6 @@ def test_startup_interactivehook_isolated_explicit(self):
             'import site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))']).wait()
         self.assertTrue(r, "'__interactivehook__' not added by enablerlcompleter()")
 
-
 @unittest.skipUnless(sys.platform == 'win32', "only supported on Windows")
 class _pthFileTests(unittest.TestCase):
 
diff --git a/Misc/NEWS.d/next/Library/2020-06-06-14-09-55.bpo-33689.EFUDH7.rst b/Misc/NEWS.d/next/Library/2020-06-06-14-09-55.bpo-33689.EFUDH7.rst
new file mode 100644
index 0000000000000..bc0756d02ddc9
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-06-06-14-09-55.bpo-33689.EFUDH7.rst
@@ -0,0 +1,4 @@
+Ignore empty or whitespace-only lines in .pth files. This matches the
+documentated behavior. Before, empty lines caused the site-packages
+dir to appear multiple times in sys.path.
+By Ido Michael, contributors Malcolm Smith and Tal Einat.



More information about the Python-checkins mailing list