Importing Classes from child folders.

Discussion in 'Python' started by monosij.forums@gmail.com, Jan 17, 2013.

  1. Guest

    Trying to do some OO Python with files in different directories.
    I have a blank __init__.py in each directory.
    It is my assumption that having an __init__.py marks the directory as a module.
    I am trying to run Controller.py from the command line.

    I would assume this has already been solved but could not find in forum
    I am somewhat new to Python. Using Python3 under Ubuntu.
    ....
    So I have a project structure as follows:
    ....
    ProjectX (root folder)
    __init__.py
    Controller.py
    + service (folder under ProjectX)
    __init__.py
    SystemSetup.py (has a class SystemSetup)
    + model (folder under ProjectX)
    __init__.py
    Directory.py (has a class Directory)

    In Controller.py if I want to use SystemSetup class, I do:
    from service.SystemSetup import SystemSetup
    ....
    and in Controller Class I have:
    def main():
    systemSetup = SystemSetup()

    I get error:
    File "Controller.py", line 4, in <module>
    from service.SystemSetup import SystemSetup
    ImportError: cannot import name SystemSetup

    What am I doing wrong? I am running from the command line.
    Do I need to set the project in PYTHONPATH first?

    But if SystemSetup and Directory are in same directory as Controller I have no problems.

    Your help would be highly appreciated.
    ....
    Btw I also tried:
    import sys, os.path
    sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
    from service.SystemSetup import SystemSetup
    ....
    No luck.

    Thank you again.

    Monosij
     
    , Jan 17, 2013
    #1
    1. Advertising

  2. Tobias M. Guest

    On an import python looks for the module in the directories specified in
    sys.path.
    The documentation on sys.path says:

    "As initialized upon program startup, the first item of this list is the
    directory containing the script that was used to invoke the Python
    interpreter." [1]

    So it`s important that the script you execute by passing it to the
    python interpreter is in your root folder ("ProjectX").
    If this script is Controller.py, you might want to check the path there by:

    import sys
    print(sys.path)

    There should be an entry with a empty string ("") standing for the
    current directory.

    Note: This is just what I suggest according to my knowledge (I'm also a
    newbie in python).

    References:
    [1] http://docs.python.org/3.3/library/sys.html#sys.path

    On 17.01.2013 08:37, wrote:
    > Trying to do some OO Python with files in different directories.
    > I have a blank __init__.py in each directory.
    > It is my assumption that having an __init__.py marks the directory as a module.
    > I am trying to run Controller.py from the command line.
    >
    > I would assume this has already been solved but could not find in forum
    > I am somewhat new to Python. Using Python3 under Ubuntu.
    > ...
    > So I have a project structure as follows:
    > ...
    > ProjectX (root folder)
    > __init__.py
    > Controller.py
    > + service (folder under ProjectX)
    > __init__.py
    > SystemSetup.py (has a class SystemSetup)
    > + model (folder under ProjectX)
    > __init__.py
    > Directory.py (has a class Directory)
    >
    > In Controller.py if I want to use SystemSetup class, I do:
    > from service.SystemSetup import SystemSetup
    > ...
    > and in Controller Class I have:
    > def main():
    > systemSetup = SystemSetup()
    >
    > I get error:
    > File "Controller.py", line 4, in <module>
    > from service.SystemSetup import SystemSetup
    > ImportError: cannot import name SystemSetup
    >
    > What am I doing wrong? I am running from the command line.
    > Do I need to set the project in PYTHONPATH first?
    >
    > But if SystemSetup and Directory are in same directory as Controller I have no problems.
    >
    > Your help would be highly appreciated.
    > ...
    > Btw I also tried:
    > import sys, os.path
    > sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
    > from service.SystemSetup import SystemSetup
    > ...
    > No luck.
    >
    > Thank you again.
    >
    > Monosij
     
    Tobias M., Jan 17, 2013
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Stu
    Replies:
    2
    Views:
    437
  2. Carfield Yim
    Replies:
    1
    Views:
    1,550
    Andrew Thompson
    May 31, 2004
  3. Jeff Rodriguez
    Replies:
    23
    Views:
    1,203
    David Schwartz
    Dec 9, 2003
  4. plb
    Replies:
    2
    Views:
    369
  5. Replies:
    5
    Views:
    354
    Tim Golden
    Mar 15, 2007
Loading...

Share This Page