[Python-Dev] Making submodules available when importing top one

Oleg Broytman phd at phdru.name
Wed Oct 16 18:41:11 CEST 2013


On Wed, Oct 16, 2013 at 01:26:11PM -0300, Facundo Batista <facundobatista at gmail.com> wrote:
> (all this using Python 3.4.0a3+)
> 
> In the stdlib, I see that (as an example):
> 
> >>> import os
> >>> os.path.abspath
> <function abspath at 0xb7123734>
> >>> os.path
> <module 'posixpath' from '/.../python/trunk/Lib/posixpath.py'>
> 
> 
> However, for other (newer) modules:
> 
> >>> import urllib
> >>> urllib.requests.urlopen
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AttributeError: 'module' object has no attribute 'requests'
> >>> import concurrent
> >>> concurrent.futures
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AttributeError: 'module' object has no attribute 'futures'
> 
> 
> So, is there a reason to not expose the submodules in the top module?
> This should be fixed?

   I don't think it should be fixed. To expose submodules automatically
top-level modules have to import them. In case one only needs a couple
of submodules (and without lazy import) importing all of them would be a
waste of time and memory.
   Module os.path is a special kind of module. On import os imports a
platform-dependent module (posixpath, ntpath) and exposes it as os.path.

Oleg.
-- 
     Oleg Broytman            http://phdru.name/            phd at phdru.name
           Programmers don't die, they just GOSUB without RETURN.


More information about the Python-Dev mailing list