You may try something like:
import os.path, sys
# Add current dir to search path.
sys.path.insert(0, "dir_or_path")
# Add module from the current directory.
sys.path.insert(0, os.path.dirname(os.path.abspath(os.path.realpath(__file__))) + "/dir")
Which will add your directory to Python search path. Then you may import as usual.
To see which paths has been added, check by:
import sys
from pprint import pprint
pprint(sys.path)
If still doesn't work, make sure that your module is the valid Python module (should contain __init__.py file inside the directory). If it is not, create empty one.
Alternatively to just load the classes inline, in Python 3 you may use exec(), for example:
exec(open(filename).read())
In Python 2: execfile().
See: Alternative to execfile in Python 3.2+?
If you run your script from the command-line, you can also specify your Python path by defining PYTHONPATH variable, so Python can lookup for modules in the provided directories, e.g.
PYTHONPATH=$PWD/FooDir ./foo.py
For alternative solutions check: How to import other Python files?
     
    
Project Namedirectory contain only Python sources? If so, you might consider converting it into a package. How are the Factory Modules and Classes expected to be used? Yes, you can screw around with thesys.pathbut unless you know what you're doing, you could be really screwing up your future scalability. Give more information about the contents ofProject Name. Where is yourmainlocated?