New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Change in error when sys.path contains a nonexistent folder (importlib) #59051
Comments
I've come across a difference from 3.2 to 3.3 while running the IPython test suite. It occurs when a directory on sys.path has been used for an import, then deleted without being removed from sys.path. Previous versions of Python ignore the nonexistent folder, but in 3.3 a FileNotFound error appears. This might be by design (errors should never pass silently), but I haven't found it mentioned in the What's New for 3.3. $ cat import.py
import sys, os, shutil
os.mkdir('foo')
with open('foo/bar.py', 'w'):
pass
sys.path.insert(0, 'foo/')
import bar # Caches a FileFinder for foo/
shutil.rmtree('foo')
import random # Comes later on sys.path
$ python3.2 import.py $ python3.3 import.py
Traceback (most recent call last):
File "import.py", line 8, in <module>
import random
File "<frozen importlib._bootstrap>", line 1162, in _find_and_load
File "<frozen importlib._bootstrap>", line 1124, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1078, in _find_module
File "<frozen importlib._bootstrap>", line 927, in find_module
File "<frozen importlib._bootstrap>", line 973, in find_module
File "<frozen importlib._bootstrap>", line 1005, in _fill_cache
FileNotFoundError: [Errno 2] No such file or directory: 'foo/' The last entry in that traceback is calling "_os.listdir(path)". |
The caching mechanism is going to check for changes in the directory. So the recommendation is to clear the cache manually: <quote> (see http://docs.python.org/dev/whatsnew/3.3.html#porting-python-code) That section doesn't really talk about the directory side of things, but calling importlib.invalidate_caches() works great to eliminate the error in your example. |
...rather, the error caused by your example. :) |
New changeset bfd04bfb55c5 by Nick Coghlan in branch 'default': |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: