Guido van Rossum wrote:
How about adding
python.py: __path__ = ['.']
This would not only reserve the name in the global namespace, but also enable applications to start using 'from python import x' now without much fuzz.
Then I have to ask the question I originally wanted to ask: what problem would that solve? And is this the right solution?
It solves the namespace issue.
Every time we add a module or package to the standard lib, there is a chance that we break someones code out there by overriding his/her own module/package (e.g. take the addition of the email package -- such generic names tend to be used a lot).
Whether it's the right solution depends on how you see it. IMHO it would be ideal to move the complete std lib under a single package. You might want to use a more diverse hierarchy but I don't think that is really needed for the existing code base. Using a single package also makes the transition from non-package imports to python-package imports a lot easier.
Also, it would make *all* standard modules accessible through the python package -- surely this isn't what we want (not if we use the Java example at least).
Are you sure that you want to make things complicated ? (see above)
Also, for some modules (that keep some global state) it's a bad idea if they are imported twice, since their initialization code would be run twice, and there would be two separate instances of the module.
That's true for the trick I proposed above since the modules are reachable in two ways with the standard way of writing 'import <stdmod>' being used in tons of code.
Now there is also a different way to approach this problem, though: that of directing Python to the right package by providing stubs for all current standard lib modules.
I have used such a stub for my mx stuff when I moved everything from top-level to under the 'mx' umbrella:
# Redirect all imports to the corresponding mx package def _redirect(mx_subpackage): global __path__ import os,mx __path__ = [os.path.join(mx.__path__,mx_subpackage)] _redirect('DateTime')
# Now load all important symbols from mx.DateTime import *
This works great -- it even let's you load pickles which store the old import names and automagically converts them to the new names.