[Python-Dev] Think a dead import finding script would be handy?

Christian Heimes lists at cheimes.de
Sun Aug 17 23:12:52 CEST 2008

Brett Cannon wrote:
> After Christian mentioned how we could speed up interpreter start-up
> by removing some dead imports he found, I decided to write up a quick
> script that generates the AST for a source file and (very roughly)
> tries to find imports that are never used. People think it's worth
> tossing into Tools, even if it is kind of rough? Otherwise I might
> toss it into the sandbox or make a quick Google code project out of
> it.
> Regardless, one interesting side-effect of the script is that beyond
> finding some extraneous imports in various places, it also found some
> holes in __all__. I have the script look for the definition of __all__
> and consider an import used if it is listed there.

Zope 3 has various tools for sorting imports or checking for unused 
imports. See http://svn.zope.org/Zope3/trunk/utilities/

Python 3.0 currently imports 25 modules on startup, Python 2.6 just 14:

./python -S -c "import sys; print(list(sorted(sys.modules)), 

['__main__', '_abcoll', '_codecs', '_fileio', '_thread', '_weakref', 
'_weakrefset', 'abc', 'builtins', 'codecs', 'copyreg', 'encodings', 
'encodings.aliases', 'encodings.latin_1', 'encodings.utf_8', 'errno', 
'genericpath', 'io', 'os', 'os.path', 'posix', 'posixpath', 'signal', 
'stat', 'sys', 'zipimport'] 26

   os.envirion uses _abcoll.MutableMapping

_weakref + _weakrefset
   imported for abc

   imported for io.IOBase

   imported by os to register some pickle handlers.
   Could be removed by placing the code into copyreg instead.

   imported early to avoid various bootstrapping issues (IIRC)

   Could be removing by delaying the import until search_function()
   is called the first time

errno, genericpath, posix, posixpath, stat:
   import by os and os.path

   Could probably be replaced by a simple and faster C implementation
   in posixmodule.c to spare the import

   I'm not sure why the module is loaded at all.

I think we can get rid of copyreg and encodings.aliases easily.


More information about the Python-Dev mailing list