This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Title: runpy.run_path() fails with frozen __main__ modules
Type: Stage:
Components: Interpreter Core Versions: Python 3.4, Python 3.5
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: eric.snow, iritkatriel, lemburg, ncoghlan
Priority: normal Keywords: patch

Created on 2014-06-12 16:24 by lemburg, last changed 2022-04-11 14:58 by admin.

File name Uploaded Description Edit
FrozenImporter-without-__main__-support.patch lemburg, 2014-06-12 16:25 Patch implementing this idea for Python 3.4.1
Messages (2)
msg220364 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2014-06-12 16:24
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 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.
msg408353 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021-12-12 00:21
The code looks very different from the patch now, is this issue still relevant?
Date User Action Args
2022-04-11 14:58:04adminsetstatus: pending -> open
github: 65936
2021-12-12 00:21:42iritkatrielsetstatus: open -> pending
nosy: + iritkatriel
messages: + msg408353

2020-03-18 18:05:17brett.cannonsetnosy: - brett.cannon
2014-06-12 16:54:49berker.peksagsetnosy: + brett.cannon, ncoghlan, eric.snow
2014-06-12 16:25:41lemburgsetfiles: + FrozenImporter-without-__main__-support.patch
keywords: + patch
2014-06-12 16:24:20lemburgcreate