By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,766 Members | 1,408 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,766 IT Pros & Developers. It's quick & easy.

access to submodules

P: n/a
TG
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 ...

Jul 19 '06 #1
Share this Question
Share on Google+
9 Replies


P: n/a
TG
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).

Jul 19 '06 #2

P: n/a
from tom import *

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

Try:
>>import tom
Then call by tom.function()

rd

Jul 19 '06 #3

P: n/a
TG
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
Jul 19 '06 #4

P: n/a
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

Jul 19 '06 #5

P: n/a
TG
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 *
....

Jul 19 '06 #6

P: n/a
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
Jul 19 '06 #7

P: n/a
TG
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 ... :-/

Jul 19 '06 #8

P: n/a
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
Jul 19 '06 #9

P: n/a
TG
okay, thanks everyone. this is much clearer now.

Jul 20 '06 #10

This discussion thread is closed

Replies have been disabled for this discussion.