[Python-Dev] this is what happens if you freeze all the modules required for startup
Terry Reedy
tjreedy at udel.edu
Wed Apr 16 22:52:34 CEST 2014
> On Wednesday, April 16, 2014 2:57:35 PM, Terry Reedy <tjreedy at udel.edu
> <mailto:tjreedy at udel.edu>> wrote:
> PS. In the user process sys.modules, there are numerous null
> entries like these:
> >>> sys.modules['idlelib.os']
> >>> sys.modules['idlelib.tokenize'__]
> >>> sys.modules['idlelib.io <http://idlelib.io>']
> >>> <etcetera>
On 4/16/2014 3:10 PM, Dr. Brett Cannon wrote:
> Is this Python 2 or 3?
Py 2. I should have said so. The entries do not appear in py3.
> In Python 2 it means an attempt to perform a relative import failed but
> an absolute in succeeded, e.g. from idlelib you imported os, so import
> tried idlelib.is <http://idlelib.is> and then os.
*I* have not done anything. For tokenize, for instance, the existing
code just does what I though were absolute imports, in 2 files.
import tokenize
Perhaps the extra entries have something to do with the fact that these
startup imports are invisible to user code, just like those done by the
interpreter itself on startup. 2.7 uses spawnv (and 3.4 uses subprocces)
to run something like one of the following.
python -c "__import__('idlelib.run').run.main(False)"
python -c "__import__('run').main(False)"
run.py has several normal lines with
import <stdlib module>
from idlelib import <idlelib module>
and ditto for some of the imported idlelib modules.
> You should definitely consider using a future import to guarantee
> absolute imports.
--
Terry Jan Reedy
More information about the Python-Dev
mailing list