Importing Classes from child folders.

M

monosij.forums

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
 
T

Tobias M.

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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,535
Members
45,007
Latest member
obedient dusk

Latest Threads

Top