Import problem

News123 news123 at free.fr
Mon Mar 8 23:21:08 CET 2010


Jean-Michel Pichavant wrote:
> Johny wrote:
>> I have this directory structure
>>
>> C:
>>       \A
>>          __init__.py
>>          amodule.py
>>
>>          \B
>>           __init__.py
>>           bmodule.py
>>
>>            \D
>>             __init__.py
>>             dmodule.py
>>
>> and  I want to import  bmodule.py
>> C:\>cd \
>>
>> C:\>python
>> Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit
>> (Intel)] on win
>> 32
>> Type "help", "copyright", "credits" or "license" for more information.
>>  
>>>>> from A.B import  bmodule
>>>>>         
>> I am bmodule
>>   C:\>
>>
>> so far so good. Now I would like to import bmodule but if the current
>> directory is \D subdirectory.
>>
>> C:> cd \A\B\D
>> C:\A\B\D>
>> C:\A\B\D>python
>> Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit
>> (Intel)] on win
>> 32
>> Type "help", "copyright", "credits" or "license" for more information.
>>  
>>>>> import sys
>>>>> sys.path.append('C:\\A')
>>>>> from A.B import bmodule
>>>>>         
>> Traceback (most recent call last):
>>   File "<stdin>", line 1, in <module>
>> ImportError: No module named A.B
>>
>> C:\>
>>
>> so I can not import a module from the parent directory? Or where did I
>> make an error?
>> Thanks for help
>>
>> L.
>>   
> try
> 
> import sys
> sys.path.append('C:\\')
> from A.B import bmodule
> 
is there any 'automatic' way of finding the top level
directory?basically the 'top level directory is the first directory
going upwards, that doesn't contain a __init__.py file.

of course you could do this 'manually' by
doing:

# assume, that this module is A.amodule
import sys
import os

# I'd love to have a similiar automatic construct
if __name__ == "__main__":
    level = 1 # or function locating how far to go up before
              # finding a dir, whcih does not contain a __init__.py
    mydir = os.path.split(__file__)[0]
    topdir = os.path.join( mydir,*(("..",)*level))
    abstop = os.path.abspath(topdir)
    sys.path.append(abstop)

## now you can import with the normal module paths

import A.blo
print "and I found blo",dir(A.blo)


bye N






More information about the Python-list mailing list