[Python-Dev] __import__ problems

Mart Somermaa mrts at mrts.pri.ee
Fri Nov 28 20:07:17 CET 2008

 > If __import__ was replaced with a version with NON compatible interface,
 > "import x.y.z" would break.

But it is not. The proposed __import__(name, submodule=True) has
a compatible interface. All tests pass with
http://bugs.python.org/file12136/issue4438.diff .

As for the imp approach, I've alternatively implemented
imp.import_module() that imports tail modules in
(colour diff in http://dpaste.com/hold/94431/).

IMHO the functionality duplication with __import__ is ugly, but
if it is desired that __import__ does not change (even in
backwards-compatible way), so be it.

The signature and behaviour is as follows:


import_module(name, globals, level) -> module

Import the tail module, given dotted module hierarchy in 'name'.
'globals' only determines the package context and is not
modified. 'level' specifies whether to use absolute or relative

 >>> from imp import import_module
 >>> import_module('foo.bar.baz')
<module 'foo.bar.baz' from 'foo/bar/baz/__init__.py'>


But I'm still +1 for adding 'tail'/'submodule'/'tailmodule'
argument to __import__ instead of providing an almost identical
copy in imp.import_module().

Let me know which of the approaches is desired (if any) and I'll
add tests and update docs.

More information about the Python-Dev mailing list