Nick Coghlan added the comment:

This is a result of a known quirk in the way sys.path entry execution works: 
the search for "__main__.py" isn't constrained specifically to sys.path[0].

That's almost entirely a bad thing, but I'd been ignoring it because I hadn't 
thought of a nice way of fixing it that didn't require some substantial changes 
to the import system APIs.

However, it just occurred to me that I may have been overcomplicating matters: 
we don't need to keep runpy from *finding* a __main__.py from outside 
sys.path[0] in this case, we just need to keep it from *running* it.

That means that after we find the candidate module spec for __main__, we can 
introduce a new constraint:

    if os.path.commonpath([sys.path[0], spec.origin]) != sys.path[0]:
        raise RuntimeError(...)

It might still be a little fiddly to decide exactly when to enforce the 
constraint, but it should still be much easier than attempting to constrain the 
search for the spec directly.

----------
nosy: +brett.cannon, eric.snow

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue31038>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to