I'm totally new to Python and I know this question was asked many times, but unfortunately it seems that my situation is a bit different... I have created a package (or so I think). The catalog tree is like this:
mydir lib (__init__.py) mod1 (__init__.py, mod11.py)
In parenthesis there are files in the catalog. Both __init__.py
files are zero length.
The file mydir/lib/mod1/mod11.py
contains the following:
def mod12(): print "mod12"
Now, I run python
, then import lib
, which works OK, then lib.mod11()
or lib.mod12()
.
Either of the last two gives me the subject error message. Actually dir(lib)
after Step 2 does not display mod11
or mod12
either. It seems I'm missing something really simple.
(I'm using Python 2.6 in Ubuntu 10.10)
Thank you
When you import lib
, you're importing the package. The only file to get evaluated and run in this case is the 0 byte __init__.py
in the lib directory.
If you want access to your function, you can do something like this from lib.mod1 import mod1
and then run the mod12
function like so mod1.mod12()
.
If you want to be able to access mod1
when you import lib
, you need to put an import mod1
inside the __init__.py
file inside the lib
directory.
More accurately, your mod1
and lib
directories are not modules, they are packages. The file mod11.py
is a module.
Python does not automatically import subpackages or modules. You have to explicitly do it, or "cheat" by adding import statements in the initializers.
>>> import lib >>> dir(lib) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__'] >>> import lib.pkg1 >>> import lib.pkg1.mod11 >>> lib.pkg1.mod11.mod12() mod12
An alternative is to use the from
syntax to "pull" a module from a package into you scripts namespace.
>>> from lib.pkg1 import mod11
Then reference the function as simply mod11.mod12()
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With