Relative import problem

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Jorgen Bodde

    #1

    Relative import problem

    Hi all,

    I want to structure my app so that I have two dirs like;

    obj/{object files}

    gui/{gui files}

    Here comes the catch. From the GUI dir, I would like to access the obj
    submodule path. I need to go one dir back.. I read there was something
    like from .. import x in python 2.5 so that I could access my obj dir
    from a lower level, but I have problems getting this to work.

    Example;

    In the main dir I have;

    main.py:
    --------
    import gui

    gui.gui.startme ()
    --------

    In the obj dir I have;

    obj/obj.py
    ---------

    def start():
    print 'Started OBJ'
    ---------

    In the GUI dir I have

    gui/gui.py
    ---------
    from .. import obj

    def start():
    obj.obj.start()
    ---------

    This does not work. It gives me;

    D:\personal\src \GuitarPortfoli o\tmp>python start.py
    Traceback (most recent call last):
    File "start.py", line 4, in <module>
    gui.gui.start()
    AttributeError: 'module' object has no attribute 'gui'

    Am I shooting myself in the foot by trying to structure? Or are there
    better more elegant ways?

    Regards,
    - Jorgen
  • kyosohma@gmail.com

    #2
    Re: Relative import problem

    On Apr 19, 11:54 am, "Jorgen Bodde" <jorgen.maill.. .@gmail.comwrot e:
    Hi all,
    >
    I want to structure my app so that I have two dirs like;
    >
    obj/{object files}
    >
    gui/{gui files}
    >
    Here comes the catch. From the GUI dir, I would like to access the obj
    submodule path. I need to go one dir back.. I read there was something
    like from .. import x in python 2.5 so that I could access my obj dir
    from a lower level, but I have problems getting this to work.
    >
    Example;
    >
    In the main dir I have;
    >
    main.py:
    --------
    import gui
    >
    gui.gui.startme ()
    --------
    >
    In the obj dir I have;
    >
    obj/obj.py
    ---------
    >
    def start():
    print 'Started OBJ'
    ---------
    >
    In the GUI dir I have
    >
    gui/gui.py
    ---------
    from .. import obj
    >
    def start():
    obj.obj.start()
    ---------
    >
    This does not work. It gives me;
    >
    D:\personal\src \GuitarPortfoli o\tmp>python start.py
    Traceback (most recent call last):
    File "start.py", line 4, in <module>
    gui.gui.start()
    AttributeError: 'module' object has no attribute 'gui'
    >
    Am I shooting myself in the foot by trying to structure? Or are there
    better more elegant ways?
    >
    Regards,
    - Jorgen
    I'm not finding much info on this subject. But here's the most
    interesting links I've found as of yet:






    Dunno if any of these will help you though. Sorry.

    Mike

    Comment

    • Martin

      #3
      Re: Relative import problem

      On Apr 19, 6:54 pm, "Jorgen Bodde" <jorgen.maill.. .@gmail.comwrot e:
      Hi all,
      >
      I want to structure my app so that I have two dirs like;
      >
      obj/{object files}
      >
      gui/{gui files}
      >
      Here comes the catch. From the GUI dir, I would like to access the obj
      submodule path. I need to go one dir back.. I read there was something
      like from .. import x in python 2.5 so that I could access my obj dir
      from a lower level, but I have problems getting this to work.
      >
      Example;
      >
      In the main dir I have;
      >
      main.py:
      --------
      import gui
      >
      gui.gui.startme ()
      --------
      >
      In the obj dir I have;
      >
      obj/obj.py
      ---------
      >
      def start():
      print 'Started OBJ'
      ---------
      >
      In the GUI dir I have
      >
      gui/gui.py
      ---------
      from .. import obj
      >
      def start():
      obj.obj.start()
      ---------
      >
      This does not work. It gives me;
      >
      D:\personal\src \GuitarPortfoli o\tmp>python start.py
      Traceback (most recent call last):
      File "start.py", line 4, in <module>
      gui.gui.start()
      AttributeError: 'module' object has no attribute 'gui'
      >
      Am I shooting myself in the foot by trying to structure? Or are there
      better more elegant ways?
      >
      Regards,
      - Jorgen
      You need to add the path to where your files are located since they
      are not in any of the "standard" path directories where Python looks.
      To do this, you can add the following lines in your files:

      import sys
      sys.path.append (/path/to/obj)
      sys.path.append (/path/to/gui)

      import obj
      import gui

      #etc..

      Hope this helps

      Comment

      Working...