[Tutor] How to use a module when only import package

Steven D'Aprano steve at pearwood.info
Fri Apr 8 06:16:01 CEST 2011


leechau wrote:
> I wrote module1 in package1, and want to use a method named 'method1' in
> module1, the caller(test.py) is like this:
> 
> import package1
> package1.module1.method1()
[...]
> When i run test.py, the output is:
> AttributeError: 'module' object has no attribute 'module1'
> File "e:\MyDoc\GODU_BVT\test.py", line 2, in <module>
>   package1.module1.method1()
> 
> If test.py is modified to:
> import package1.module1
> ...
> then everything goes well. 

Yes, that is correct, and that is a deliberate design.

What if your package had a 1000 sub-modules, each of which were big? You
wouldn't want loading the main package to automatically load all 1000
sub-modules, if you only needed 1.

You either import the sub-module by hand:

import package1.module1

and now you can use package1.module1.method1 (not really a method,
actually a function). If you want module1 to automatically be available
after importing the package, include one of these in the package1
__init__.py file:

import module1  # should work in Python 2


and now package1 will include the module1 in its namespace.


-- 
Steven



More information about the Tutor mailing list