Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > access to submodules

Reply
Thread Tools

access to submodules

 
 
TG
Guest
Posts: n/a
 
      07-19-2006
hi.

This is my first try on modules.

I've got :

tom/
__init__.py
core.py
ui.py
data.py

then, when I'm in my ipython shell :

?> from tom import *


this works, it loads core, ui and data
but when I do this :


?> import tom

?> tom.core
AttributeError: 'module' object has no attribute 'core'


Well, i guess I missed something, but I don't see what ...

 
Reply With Quote
 
 
 
 
TG
Guest
Posts: n/a
 
      07-19-2006
I've just found this :

If I add :

"import core, data, ui" inside my "tom/__init__.py" file, it will
work. But this line does not seems to exist in other files (after
having a look at several files inside /usr/lib/python2.4).

 
Reply With Quote
 
 
 
 
BartlebyScrivener
Guest
Posts: n/a
 
      07-19-2006
>> > from tom import *

You CAN do this, but it's a bad habit.

Try:

>>import tom


Then call by tom.function()

rd

 
Reply With Quote
 
TG
Guest
Posts: n/a
 
      07-19-2006
I know this is a bad habit ... I was just doing it to show what is
disturbing me.

Obviously the "star" syntax finds the submodules because they are
loaded, but when I properly load the module alone with "import tom",
the "dot" syntax does not find "tom.core".

BartlebyScrivener wrote:
> >> > from tom import *

>
> You CAN do this, but it's a bad habit.
>
> Try:
>
> >>import tom

>
> Then call by tom.function()
>
> rd


 
Reply With Quote
 
BartlebyScrivener
Guest
Posts: n/a
 
      07-19-2006
http://tinyurl.com/6yz2g

If you do

from tom import *

then you no longer need tom, you imported all of his FUNCTIONS (never
heard of submodule).

rd

 
Reply With Quote
 
TG
Guest
Posts: n/a
 
      07-19-2006
BartlebyScrivener wrote:
> then you no longer need tom, you imported all of his FUNCTIONS (never
> heard of submodule).


my mistake, I was using the wrong name

tom/ <-- package
__init__.py
core.py <
data.py < these are modules contained in tom/
ui.py <


if I import tom, it is supposed to load functions defined in
tom/__init__.py and make all the modules inside accessible through the
"dot" syntax.

Therefore, this is supposed to work :

?> import tom
?> help(tom.core)

AttributeError: 'module' object has no attribute 'core'

But if I use the baaaaad star syntax

?> from tom import *
?> help(core)

this will work. So that means star loaded functions of __init__.py AND
modules contained, whereas dot syntax does not give me access to
modules inside. The issue is not about using or not using the import *
....

 
Reply With Quote
 
Peter Otten
Guest
Posts: n/a
 
      07-19-2006
TG wrote:

> if I import tom, it is supposed to load functions defined in
> tom/__init__.py and make all the modules inside accessible through the
> "dot" syntax.
>
> Therefore, this is supposed to work :
>
> ?> import tom
> ?> help(tom.core)
>
> AttributeError: 'module' object has no attribute 'core'
>
> But if I use the baaaaad star syntax
>
> ?> from tom import *
> ?> help(core)
>
> this will work.


No, it won't. Try again with a fresh interpreter (no prior imports)

>>> from tom import *
>>> core

Traceback (most recent call last):
File "<stdin>", line 1, in ?
NameError: name 'core' is not defined
>>> import tom
>>> tom.core

Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'module' object has no attribute 'core'

Only after an explicit import of tom.core...

>>> from tom import core
>>> del core
>>> from tom import *
>>> core

<module 'tom.core' from 'tom/core.py'>

is core added as an attribute to tom and will therefore be copied into the
namespace of a module doing a star-import.

Peter
 
Reply With Quote
 
TG
Guest
Posts: n/a
 
      07-19-2006
okay,

so only when I have inside __init__.py

__all__ = ["core"]

this works

?> from tom import *
?> help(core)

but (in a brand new interpretor)

?> import tom
?> help(tom.core)

AttributeError: 'module' object has no attribute 'core'

got it. But ...

?> import numpy
?> help(numpy.core)

this will work, even if core is a subpackage of numpy. and i don't have
to explicitly import numpy.core.

I must be missing something ... :-/

 
Reply With Quote
 
Peter Otten
Guest
Posts: n/a
 
      07-19-2006
TG wrote:

> okay,
>
> so only when I have inside __init__.py
>
> __all__ = ["core"]
>
> this works
>
> ?> from tom import *
> ?> help(core)
>
> but (in a brand new interpretor)
>
> ?> import tom
> ?> help(tom.core)
>
> AttributeError: 'module' object has no attribute 'core'
>
> got it. But ...
>
> ?> import numpy
> ?> help(numpy.core)
>
> this will work, even if core is a subpackage of numpy. and i don't have
> to explicitly import numpy.core.
>
> I must be missing something ... :-/


numpy does the equivalent of

import core

in its __init__.py

"""
Help on method __call__ in module numpy._import_tools:

__call__(self, *packages, **options) unbound
numpy._import_tools.PackageLoader method
Load one or more packages into parent package top-level namespace.

Usage:

This function is intended to shorten the need to import many of
subpackages, say of scipy, constantly with statements such as

import scipy.linalg, scipy.fftpack, scipy.etc...

Instead, you can say:

import scipy
scipy.pkgload('linalg','fftpack',...)
"""

Peter
 
Reply With Quote
 
Dennis Lee Bieber
Guest
Posts: n/a
 
      07-19-2006
On 19 Jul 2006 08:39:33 -0700, "TG" <(E-Mail Removed)> declaimed the
following in comp.lang.python:

>
> I must be missing something ... :-/


Like... maybe the fact that the numpy __init__.py file has lots of
executable code to explicitly load the packages?

from _import_tools import PackageLoader
pkgload = PackageLoader()
pkgload('testing','core','lib','linalg','dft','ran dom','f2py',
verbose=NUMPY_IMPORT_VERBOSE,postpone=False)
--
Wulfraed Dennis Lee Bieber KD6MOG
http://www.velocityreviews.com/forums/(E-Mail Removed) (E-Mail Removed)
HTTP://wlfraed.home.netcom.com/
(Bestiaria Support Staff: (E-Mail Removed))
HTTP://www.bestiaria.com/
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Move modules to submodules question joshua.kimball@gmail.com Python 1 01-11-2013 08:33 PM
Automatic import of submodules Massi Python 4 11-28-2011 04:31 AM
Noddy with submodules? Torsten Mohr Python 1 09-08-2009 02:57 AM
import X between submodules in a package Donn Ingle Python 7 12-19-2007 05:50 PM
Python submodules and name imports Frank Aune Python 1 08-23-2007 04:48 PM



Advertisments