[New-bugs-announce] [issue21737] runpy.run_path() fails with frozen __main__ modules

Marc-Andre Lemburg report at bugs.python.org
Thu Jun 12 18:24:20 CEST 2014


New submission from Marc-Andre Lemburg:

The logic in runpy.run_path() assumes that removing the __main__ entry from sys.modules is enough to be able to use the module search logic for e.g. importing packages and ZIP files (with embedded __main__.py files).

In Python 3.4 (and probably also 3.3 where the importlib was added), this no longer works if a frozen __main__ module is present.

The reason is that the sys.meta_path lists the FrozenImporter before the PathFinder. The runpy trick only works if the PathFinder gets a chance to do its magic, but never gets to play, since the FrozenImporter always returns the existing frozen __main__ module (causing all kinds of strange effects).

Now, looking at the implementation, the frozen __main__ is imported by import.c, not the importlib, so a working solution is to not have the FrozenImporter work on __main__ modules at all.

This then allows the PathFinder to deal with finding the __main__ module in directories or ZIP files and thus allows the hack in runpy to work again.

BTW: In the long run, it would probably better to clean up runpy altogether. It's really messy code due to the many details that it has to address, but I guess this a larger project on its own.

----------
components: Interpreter Core
messages: 220364
nosy: lemburg
priority: normal
severity: normal
status: open
title: runpy.run_path() fails with frozen __main__ modules
versions: Python 3.4, Python 3.5

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue21737>
_______________________________________


More information about the New-bugs-announce mailing list