My Flask project is structured as follows: my_project │ ├── app │ ├── __init__.py │ ├── api │ ├── static │ └── templates ├── config.py └── run.py app/__init__.py: from flask import Flask app = Flask(__name__) app.config.from_object('config') run.py from app import app app.run( host=app.config.get('HOST', '0.0.0.0'), port=app.config.get('PORT', 5000) ) This worked before, but I'm trying to migrate my project from Python 2 to Python 3, and running python run.py no longer works. I get the following error: Traceback (most recent call last): File "/Users/rasmi/Projects/my_project/run.py", line 3, in <module> app.run( AttributeError: module 'app' has no attribute 'run' If I change the import style in run.py to match the one here: from .app import app app.run( host=app.config.get('HOST', '0.0.0.0'), port=app.config.get('PORT', 5000) ) I get a different error: Traceback (most recent call last): File "/Users/rasmi/Projects/my_project/run.py", line 1, in <module> from .app import app ModuleNotFoundError: No module named '__main__.app'; '__main__' is not a package Wrapping my app.run() call in an if __name__ == '__main__': block yields the same results. What's causing this issue? Continue reading...