How to import python class file from same directory?
Question:
I have a directory in my Python 3.3 project called /models.
from my main.py
I simply do a
from models import *
in my __init__.py
:
__all__ = ["Engine","EngineModule","Finding","Mapping","Rule","RuleSet"]
from models.engine import Engine,EngineModule
from models.finding import Finding
from models.mapping import Mapping
from models.rule import Rule
from models.ruleset import RuleSet
This works great from my application.
I have a model that depends on another model, such that in my engine.py
I need to import finding.py
in engine.py
. When I do: from finding import Finding
I get the error No Such Module exists
.
How can I import class B from file A in the same module/directory?
Answers:
Since you are using Python 3, which disallows these relative imports (it can lead to confusion between modules of the same name in different packages).
Use either:
from models import finding
or
import models.finding
or, probably best:
from . import finding # The . means "from the same directory as this module"
Apparently I can do: from .finding import Finding
and this works.
And the answer below reflects this as well so I guess this is reasonably correct.
I’ve fixed up my file naming and moved my tests to a different directory and I am running smoothly now. Thanks!
I have a directory in my Python 3.3 project called /models.
from my main.py
I simply do a
from models import *
in my __init__.py
:
__all__ = ["Engine","EngineModule","Finding","Mapping","Rule","RuleSet"]
from models.engine import Engine,EngineModule
from models.finding import Finding
from models.mapping import Mapping
from models.rule import Rule
from models.ruleset import RuleSet
This works great from my application.
I have a model that depends on another model, such that in my engine.py
I need to import finding.py
in engine.py
. When I do: from finding import Finding
I get the error No Such Module exists
.
How can I import class B from file A in the same module/directory?
Since you are using Python 3, which disallows these relative imports (it can lead to confusion between modules of the same name in different packages).
Use either:
from models import finding
or
import models.finding
or, probably best:
from . import finding # The . means "from the same directory as this module"
Apparently I can do: from .finding import Finding
and this works.
And the answer below reflects this as well so I guess this is reasonably correct.
I’ve fixed up my file naming and moved my tests to a different directory and I am running smoothly now. Thanks!