python / cpython

The Python programming language
https://www.python.org
Other
63.13k stars 30.22k forks source link

Consider dropping ImportWarning for empty sys.path_hooks and sys.meta_path #65251

Closed brettcannon closed 10 years ago

brettcannon commented 10 years ago
BPO 21052
Nosy @brettcannon, @ncoghlan, @pitrou, @ericsnowcurrently, @vadmium, @pquentin

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: ```python assignee = 'https://github.com/brettcannon' closed_at = created_at = labels = ['interpreter-core', 'easy', 'type-bug'] title = 'Consider dropping ImportWarning for empty sys.path_hooks and sys.meta_path' updated_at = user = 'https://github.com/brettcannon' ``` bugs.python.org fields: ```python activity = actor = 'berker.peksag' assignee = 'brett.cannon' closed = True closed_date = closer = 'brett.cannon' components = ['Interpreter Core'] creation = creator = 'brett.cannon' dependencies = [] files = [] hgrepos = [] issue_num = 21052 keywords = ['easy'] message_count = 7.0 messages = ['214702', '214703', '214712', '214715', '222403', '229002', '229005'] nosy_count = 10.0 nosy_names = ['brett.cannon', 'ncoghlan', 'pitrou', 'Arfrever', 'ikanobori', 'python-dev', 'eric.snow', 'martin.panter', 'msmhrt', 'Quentin.Pradet'] pr_nums = [] priority = 'normal' resolution = 'fixed' stage = 'resolved' status = 'closed' superseder = None type = 'behavior' url = 'https://bugs.python.org/issue21052' versions = ['Python 3.5'] ```

brettcannon commented 10 years ago

Issue bpo-21049 managed to trigger a huge output of "ImportWarning: sys.meta_path is empty" because it managed to trigger an import during interpreter shutdown. The ImportWarning for sys.path_hooks and sys.meta_path were originally added because before importlib took over import it was totally legal to blank out sys.path_hooks and sys.meta_path and have import continue to work. But hopefully by the time Python 3.5 comes out there will be enough knowledge out there to not blindly empty them, making the warning superfluous as well as an annoyance when things go wrong in other respects.

brettcannon commented 10 years ago

I should also say that dropping warnings leaves only a single case of ImportWarning related to empty directory names (in relation to Finder.find_module()). Once that can go away that will eliminate all uses of warnings in importlib and thus won't necessitate importing it in this case.

pitrou commented 10 years ago

Note that in issue bpo-21409, sys.meta_path isn't "empty", it is actually None.

Another possibility is to drop those warnings only when the interpreter is shutting down (it would be easy to add a private API in sys to get that information).

brettcannon commented 10 years ago

It's a simple if not sys.meta_path check so it doesn't differentiate. But that's actually a good point about it being None in this case due to the shutdown; if the check changed to if sys.meta_path is not None and len(sys.meta_path) == 0 then that should skip the shutdown issue while keeping the warning around.

Definitely going to be one of those instances where the tests are going to be more troublesome than the fix. =)

8756f716-3392-4fe7-9783-75b6be026136 commented 10 years ago

Hi,

I can reproduce this issue with the following steps.

$ uname -a
Linux ashrose 3.2.0-65-generic #99-Ubuntu SMP Fri Jul 4 21:03:29 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ python3.4 --version
Python 3.4.1
$ touch spam.txt
$ python3.4 -Wa -c "class A: pass; a = open('spam.txt')"
sys:1: ResourceWarning: unclosed file <_io.TextIOWrapper name='spam.txt' mode='r' encoding='UTF-8'>
_frozen_importlib:2150: ImportWarning: sys.meta_path is empty
_frozen_importlib:2150: ImportWarning: sys.meta_path is empty
_frozen_importlib:2150: ImportWarning: sys.meta_path is empty
_frozen_importlib:2150: ImportWarning: sys.meta_path is empty
_frozen_importlib:2150: ImportWarning: sys.meta_path is empty
...
$ python3.4 -Wa -c "a = open('spam.txt')"
sys:1: ResourceWarning: unclosed file <_io.TextIOWrapper name='spam.txt' mode='r' encoding='UTF-8'>
$ python3.4 -Wa -c "class A: pass; open('spam.txt')"
-c:1: ResourceWarning: unclosed file <_io.TextIOWrapper name='spam.txt' mode='r' encoding='UTF-8'>
$
brettcannon commented 10 years ago

Fixed in https://hg.python.org/cpython/rev/d9f71bc6d897

1762cc99-3127-4a62-9baf-30c3d0f51ef7 commented 10 years ago

New changeset d9f71bc6d897 by Brett Cannon in branch 'default': Issue bpo-21052: Don't raise ImportWarning for sys.meta_path or https://hg.python.org/cpython/rev/d9f71bc6d897