[Python-Dev] Fix import errors to have data
Guido van Rossum
guido at python.org
Thu Jul 29 00:13:32 CEST 2004
[Guido]
> >You can certainly build all that using import hooks. But perhaps
> >that's too low a level, and a higher-level infrastructure would be
> >helpful? Import hooks have been around for ages and many improvements
> >have been proposed but few of those have actually found much use (or
> >even found to be real improvements).
[Phillip]
> Sorry, I'm confused. By "higher-level infrastructure", are you
> meaning a way to co-ordinate import hooks, or something higher-level
> than the "module spaces" concept?
I meant whatever you want. I am not familiar with the need for this
functionality, all I know is import hooks and you were clear that
those are too low-level.
> As far as I can tell, a properly implemented module space should
> allow arbitrary import hooks to be used within that module space, so
> long as the hooks obtain their copy of 'sys' using the previous
> value of '__import__'. For example, if you create a hook using
> 'import ihooks' within a given module space, then that space's copy
> of 'ihooks' will see the space's copy of 'sys', so it will thus do
> all its magic using the right 'sys'.
Today's import hooks aren't written with recursive import hooks in
mind.
> The weak spot is 'imp', and any other C-coded modules that access
> the "real" 'sys' module directly (e.g. '__builtin__'). These
> modules would have to be replaced by "safe" versions. E.g., a
> 'safe_imp' in Python that explicitly passed in a path to the "real"
> imp functions, and so on. Finding all of the modules that do this
> and providing "safe" replacements (while making sure that truly
> global "sys" attributes are shared) would probably be the biggest
> task in creating a Java-like import framework.
Sure. Feel free to build it and propose it as a standard library
addition, if you think it will be useful for others. I might even
find a use for it -- but right now I'm +0 because I really don't have
a need for this stuff in anything I'm doing.
> (Oh... and another infrastructure-level issue: Python classes know
> their __module__ name, but in a system using module spaces, the
> module name alone is not sufficient to identify the module where the
> class originated. In Java, a class is uniquely identified by the
> combination of its fully qualified name, and the classloader used to
> load it. This is not an issue for Python functions (which reference
> the module globals) or for modules themselves, which both indirectly
> refer to the loader used to load the module. But it could be an
> issue for classes.)
But who ever uses __module__ for anything else than printing it?
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list