changeset: 100875:bd1af1a97c2e user: Brett Cannon date: Fri Apr 08 15:04:28 2016 -0700 files: Doc/whatsnew/3.6.rst Lib/site.py Lib/test/test_site.py Misc/ACKS Misc/NEWS description: Issue #26587: Allow .pth files to specify file paths as well as directories. Thanks to Wolfgang Langner for the bug report and initial version of the patch. diff -r d214b30e8ef0 -r bd1af1a97c2e Doc/whatsnew/3.6.rst --- a/Doc/whatsnew/3.6.rst Fri Apr 08 12:29:05 2016 -0700 +++ b/Doc/whatsnew/3.6.rst Fri Apr 08 15:04:28 2016 -0700 @@ -251,6 +251,14 @@ an instance were excluded. (Contributed by Martin Panter in :issue:`25590`.) +site +---- + +When specifying paths to add to :attr:`sys.path` in a `.pth` file, +you may now specify file paths on top of directories (e.g. zip files). +(Contributed by Wolfgang Langner in :issue:`26587`). + + telnetlib --------- diff -r d214b30e8ef0 -r bd1af1a97c2e Lib/site.py --- a/Lib/site.py Fri Apr 08 12:29:05 2016 -0700 +++ b/Lib/site.py Fri Apr 08 15:04:28 2016 -0700 @@ -131,13 +131,13 @@ def _init_pathinfo(): - """Return a set containing all existing directory entries from sys.path""" + """Return a set containing all existing file system items from sys.path.""" d = set() - for dir in sys.path: + for item in sys.path: try: - if os.path.isdir(dir): - dir, dircase = makepath(dir) - d.add(dircase) + if os.path.exists(item): + _, itemcase = makepath(item) + d.add(itemcase) except TypeError: continue return d @@ -150,9 +150,9 @@ """ if known_paths is None: known_paths = _init_pathinfo() - reset = 1 + reset = True else: - reset = 0 + reset = False fullname = os.path.join(sitedir, name) try: f = open(fullname, "r") @@ -190,9 +190,9 @@ 'sitedir'""" if known_paths is None: known_paths = _init_pathinfo() - reset = 1 + reset = True else: - reset = 0 + reset = False sitedir, sitedircase = makepath(sitedir) if not sitedircase in known_paths: sys.path.append(sitedir) # Add path component diff -r d214b30e8ef0 -r bd1af1a97c2e Lib/test/test_site.py --- a/Lib/test/test_site.py Fri Apr 08 12:29:05 2016 -0700 +++ b/Lib/test/test_site.py Fri Apr 08 15:04:28 2016 -0700 @@ -75,7 +75,7 @@ def test_init_pathinfo(self): dir_set = site._init_pathinfo() for entry in [site.makepath(path)[1] for path in sys.path - if path and os.path.isdir(path)]: + if path and os.path.exists(path)]: self.assertIn(entry, dir_set, "%s from sys.path not found in set returned " "by _init_pathinfo(): %s" % (entry, dir_set)) diff -r d214b30e8ef0 -r bd1af1a97c2e Misc/ACKS --- a/Misc/ACKS Fri Apr 08 12:29:05 2016 -0700 +++ b/Misc/ACKS Fri Apr 08 15:04:28 2016 -0700 @@ -815,6 +815,7 @@ Tino Lange Glenn Langford Andrew Langmead +Wolfgang Langner Detlef Lannert Soren Larsen Amos Latteier diff -r d214b30e8ef0 -r bd1af1a97c2e Misc/NEWS --- a/Misc/NEWS Fri Apr 08 12:29:05 2016 -0700 +++ b/Misc/NEWS Fri Apr 08 15:04:28 2016 -0700 @@ -237,6 +237,9 @@ Library ------- +- Issue #26587: the site module now allows .pth files to specify files to be + added to sys.path (e.g. zip files). + - Issue #25609: Introduce contextlib.AbstractContextManager and typing.ContextManager.