I’m busy developing an application in python, my application is structured as follows
main.py
pr/
core/
__init__.py
predictor.py
gui/
predictor/
__init__.py
predict_panel.py
__init__.py
pr_app.py
__init__.py
I launch the application using main.py
inside pr_app.py I’ve got
class PrApp(wx.App):
PREDICTOR = Predictor()
inside predict_panel.py I can successfully do
from pr.core.predictor import Predictor
but for some reason I cannot do
from pr.gui.pr_app import PrApp
I get presented with
ImportError: cannot import name PrApp
Is there some kind of gotcha when importing from parent directories in python, or am I missing something?
I tried this and made a tree like yours, but with the addition of an
__init__.pyin theprdirectory. Without that__init__.pyyourfrom pr.core.predictor import Predictorshould fail, so I think you have it, but forgot to write it in your question.I was not able to get the failure you did, it worked fine for me. I can do both imports from
predict_panel.py, as I expected to.However, if I from
pr_app.pyimportpredict_panel, then the import frompredict_panel.pyofPrAppwill fail. This is because I have a circular import. You try to importpredict_panelfromPrAppduring the import ofPrAppand you try to importPrAppduring the import ofpredict_panel. That would create an infinite recursion of imports, so it is not allowed.The best way to solve this is to reorganize your code so you don’t have to do circular imports. If
PrAppimportspredict_panel, why wouldpredict_panelneedPrApp? That’s a sign of a flawed design.However, the quickest way to fix it is to move one of the imports from the top of the module into the function/method where it’s called. That’s bad practice, but it will fix your problem quickly.