question about module resolution

Peter Otten __peter__ at web.de
Thu Jan 18 03:03:48 EST 2007


Emin wrote:

> On Jan 17, 11:20 am, Peter Otten <__pete... at web.de> wrote:
>> Emin wrote:
>> > I often find myself wanting to have a child module get some parameters
>> > defined in a parent module. For example, imagine  I have the following
>> > directory structure and want something in baz.py to look at a value in
>> > config.py. I end up putting in things like import sys;
>> > sys.path.append('../..'). Is there a better way?
>>
>> > foo/
>> >      __init__.py
>> >      config.py
>> >      bar/
>> >           __init__.py
>> >           baz.py

>> from __future__ import absolute_import  
>> from .. import config

> I put the lines you suggested in baz.py, but got an error:
> 
> Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit
> (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>>>> import baz
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "baz.py", line 3, in <module>
>     from .. import config
> ValueError: Attempted relative import in non-package

If you put foo/bar in the path and then

import baz

how do you think that baz is to know that it's actually foo.bar.baz?
Make sure that the parent directory of foo is in sys.path (e. g. by starting
the interpreter in that directory) and then import baz using its official
name.

$ tree
.
`-- foo
    |-- __init__.py
    |-- bar
    |   |-- __init__.py
    |   `-- baz.py
    `-- config.py

2 directories, 4 files

$ cat foo/config.py
print "importing config"

$ cat foo/bar/baz.py
from __future__ import absolute_import
from .. import config

$ python2.5
Python 2.5 (r25:51908, Oct  3 2006, 08:48:09)
[GCC 3.3.3 (SuSE Linux)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import foo.bar.baz
importing config

Peter




More information about the Python-list mailing list