Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Initial setup of Flask Mega Tutorial on pythonanywhere

After successfully completing the pythonanywhere flask tutorial (pa.com), Miguel Grinberg's the "Flask Mega Tutorial" (fmt) beckoned. Sadly, I've not even made it to "Hello, World". Here's what I have done:

In pa.com attempting to follow fmt verbatim is a no go:

python3 -m venv flask

leads to an error of

ensurepip is not available

and we do not have sudo access.

Undeterred, I reasoned that all Miguel is asking us to do is distribute the functionality we see in one file in the pa.com tutorial (flask_app.py) into a few files that will make the building of a full app easier. Since pa.com is already setting up my base web app with flask and python 3.4, not being able to set up the virtual env. did not seem to be a block, at least not at first.

Per the fmt, in the base dir of the pa.com (pwd -> home/{username}/microblog) -- which is where the flask_app.py file that successfully generates the pa.com tutorial page lives -- I set up app and tmp directories, and create app/__init__.py, app/views.py and the run.py files as directed by fmt

Hitting the app page (run.py the only file in the main directory) generates an Unhandled Exception on the page.

Changing the name to flask_app.py (which seems to be what pa.com expects on flask installations) generates the same error.

Modifying the content of the flask_app.py code to:

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
  return "working from flask_app.py"

Generates a successful output from the app, whereas having the same code in a file named run.py generates the same Unhandled Exception error.

the lines:

from app import app in both run.py and views.py and
from app import views in __init__.py

all make me wonder... where is this "app" module coming from? But aside from being puzzled by that question, no other ideas on how to proceed from here. Any suggestions? Would really like to get set up on pa.com and work through this tutorial/book.

Feel like I am missing something basic, but not sure what.

like image 813
recursively.curious Avatar asked Mar 14 '23 14:03

recursively.curious


1 Answers

First rule is: don't use app.run() on PythonAnywhere - that's what run.py is trying to do. That's fine for your own PC, but on PA it will cause an error. It's fine to have the file there, but don't try and import from that file in your wsgi config.

Instead, you just need to import the flask app variable, which Miguel gets you to put in app/__init__.py (that's slightly confusing, a variable called app, and a folder called app, but we can deal with it!)

To do that, you'll want to add the folder that contains the app folder to your sys.path. You also need to "rename" the app variable to application as you import it:

# assuming we have /home/myusername/microblog/app/__init__.py:
path = '/home/myusername/microblog'
if path not in sys.path:
    sys.path.append(path)

# now we can import the app variable from the app folder's __init__
# and rename it to application
from app import app as application

More info: a brief guide to flask on pythonanywhere and a guide to debugging imports and sys.path problems in your pythonanywhere wsgi file

like image 185
hwjp Avatar answered Mar 24 '23 18:03

hwjp