Commit a43f0ca9 authored by Brett Cannon's avatar Brett Cannon

merge

parents 43cc842e 5d348335
...@@ -722,6 +722,10 @@ find and load modules. ...@@ -722,6 +722,10 @@ find and load modules.
Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all
finders stored in :attr:`sys.path_importer_cache`. finders stored in :attr:`sys.path_importer_cache`.
.. versionchanged:: 3.4
Calls objects in :data:sys.path_hooks with the current working directory
for ``''`` (i.e. the empty string).
.. class:: FileFinder(path, \*loader_details) .. class:: FileFinder(path, \*loader_details)
...@@ -748,6 +752,9 @@ find and load modules. ...@@ -748,6 +752,9 @@ find and load modules.
.. versionadded:: 3.3 .. versionadded:: 3.3
.. versionchange:: 3.4
The empty string is no longer special-cased to be changed into ``'.'``.
.. attribute:: path .. attribute:: path
The path the finder will search in. The path the finder will search in.
......
...@@ -675,3 +675,14 @@ that may require changes to your code. ...@@ -675,3 +675,14 @@ that may require changes to your code.
:c:func:`PyMem_RawRealloc`, or *NULL* if an error occurred, instead of a :c:func:`PyMem_RawRealloc`, or *NULL* if an error occurred, instead of a
string allocated by :c:func:`PyMem_Malloc` or :c:func:`PyMem_Realloc`. string allocated by :c:func:`PyMem_Malloc` or :c:func:`PyMem_Realloc`.
* :cls:`importlib.machinery.PathFinder` now passes on the current working
directory to objects in :data:`sys.path_hooks` for the empty string. This
results in :data:`sys.path_importer_cache` never containing ``''``, thus
iterating through :data:`sys.path_importer_cache` based on :data:`sys.path`
will not find all keys. A module's ``__file__`` when imported in the current
working directory will also now have an absolute path, including when using
``-m`` with the interpreter (this does not influence when the path to a file
is specified on the command-line).
* :cls:`importlib.machinery.FileFinder` no longer special-cases the empty string
to be changed to ``'.'``.
...@@ -1302,7 +1302,7 @@ class PathFinder: ...@@ -1302,7 +1302,7 @@ class PathFinder:
""" """
if path == '': if path == '':
path = '.' path = _os.getcwd()
try: try:
finder = sys.path_importer_cache[path] finder = sys.path_importer_cache[path]
except KeyError: except KeyError:
...@@ -1373,7 +1373,7 @@ class FileFinder: ...@@ -1373,7 +1373,7 @@ class FileFinder:
loaders.extend((suffix, loader) for suffix in suffixes) loaders.extend((suffix, loader) for suffix in suffixes)
self._loaders = loaders self._loaders = loaders
# Base (directory) path # Base (directory) path
self.path = path or '.' self.path = path
self._path_mtime = -1 self._path_mtime = -1
self._path_cache = set() self._path_cache = set()
self._relaxed_path_cache = set() self._relaxed_path_cache = set()
......
...@@ -82,11 +82,11 @@ class FinderTests(unittest.TestCase): ...@@ -82,11 +82,11 @@ class FinderTests(unittest.TestCase):
path = '' path = ''
module = '<test module>' module = '<test module>'
importer = util.mock_modules(module) importer = util.mock_modules(module)
hook = import_util.mock_path_hook(os.curdir, importer=importer) hook = import_util.mock_path_hook(os.getcwd(), importer=importer)
with util.import_state(path=[path], path_hooks=[hook]): with util.import_state(path=[path], path_hooks=[hook]):
loader = machinery.PathFinder.find_module(module) loader = machinery.PathFinder.find_module(module)
self.assertIs(loader, importer) self.assertIs(loader, importer)
self.assertIn(os.curdir, sys.path_importer_cache) self.assertIn(os.getcwd(), sys.path_importer_cache)
def test_None_on_sys_path(self): def test_None_on_sys_path(self):
# Putting None in sys.path[0] caused an import regression from Python # Putting None in sys.path[0] caused an import regression from Python
......
...@@ -10,6 +10,13 @@ Projected release date: 2013-10-20 ...@@ -10,6 +10,13 @@ Projected release date: 2013-10-20
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #18416: importlib.machinery.PathFinder now treats '' as the cwd and
importlib.machinery.FileFinder no longer special-cases '' to '.'. This leads
to modules imported from cwd to now possess an absolute file path for
__file__ (this does not affect modules specified by path on the CLI but it
does affect -m/runpy). It also allows FileFinder to be more consistent by not
having an edge case.
- Issue #4555: All exported C symbols are now prefixed with either - Issue #4555: All exported C symbols are now prefixed with either
"Py" or "_Py". "Py" or "_Py".
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment