Prev: Building Python-2.6.4 on G/L: can't build in _ssl support.
Next: Call for Paper The International Journal of Computer Science (IJCS)
From: Johny on 6 Mar 2010 06:53 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.
From: Steven D'Aprano on 6 Mar 2010 09:48 On Sat, 06 Mar 2010 03:53:53 -0800, Johny wrote: >>>> 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 The current directory is irrelevant, except that it is automatically added to the PYTHONPATH. That's why you can import A.B when the current directory is C. You are trying to import module B from package A *inside* directory C:\A, but there is no such package A inside C:\A. You need to add C to the path, and then it should work. -- Steven
From: Jean-Michel Pichavant on 8 Mar 2010 08:10 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 JM
From: News123 on 8 Mar 2010 17:06 Hi Steven, Steven D'Aprano wrote: > On Sat, 06 Mar 2010 03:53:53 -0800, Johny wrote: > >>>>> 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 > > The current directory is irrelevant, except that it is automatically > added to the PYTHONPATH. That's why you can import A.B when the current > directory is C. Minor currection: It doesn't seem to be the current directory, but the directory, where the script is located in, which is auto-appended to the pythonpath Please see following example: $ python -V Python 2.6.4 $ mkdir A $ touch A/__init__ $ # create A/blla.py an A/blo.py $ cat A/bla.py print "I am bla" import A.blo print "and I found blo",dir(A.blo) $ cat A/blo.py avar = 3 print "I am blo" $ python A/bla.py I am bla Traceback (most recent call last): File "A/bla.py", line 2, in <module> import A.blo ImportError: No module named A.blo However: $ cat alternative_bla.py import sys sys.path.append(".") print "I am bla" import A.blo print "and I found blo",dir(A.blo) $ python A/alternativ_bla.py I am bla I am blo and I found blo ['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'avar'] bye N
From: News123 on 8 Mar 2010 17:21
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 |