How do i deploy flask app to pythonanywhere?

I am using python anywhere to host a flask app that has 2 components: 1) a website to show some stuff from a txt file and 2) a python script to do some API stuff and change the data in the txt file.

Currently, I can run both of these separately without issue but I cannot use them together. I have tried to use threading but it doesn't work.

Basically, the background script (part 2) is in backend.py called by mainloop() consists of some API calls to other websites, modifying the txt file then sleeping for an hour.

wsgi.py

import sys
path = '/home/michalis95/API-updater'
if path not in sys.path:
    sys.path.append(path)

from threading import Thread
import website
application = website.create_app()

/website/__init.py__

    from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path
from threading import Thread
from flask_login import LoginManager

db = SQLAlchemy()
DB_NAME = "database.db"

def create_app():
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
    db.init_app(app)

    from .views import views
    from .auth import auth

    app.register_blueprint(views, url_prefix='/')
    app.register_blueprint(auth, url_prefix='/')

    from .models import User, Note

    create_database(app)

    login_manager = LoginManager()
    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)

    @login_manager.user_loader
    def load_user(id):
        return User.query.get(int(id))

    import backend
    def run():
        t=Thread(target=backend.mainloop())
        t.start()
    run()
    return app

def create_database(app):
    if not path.exists('website/' + DB_NAME):
        db.create_all(app=app)
        print('Created Database!')

backend.py

def mainloop():
  while True:
    #do stuff
    time.sleep(3600)

A step-by-step guide on how to deploy and publish an app on pythonanywhere

TLDR; In this tutorial, I describe every step on how to deploy and publish your app on pythonanywhere. I am personally really convinced by the hosting service. If you are creating an account via my affiliate links you support my work and further tutorials in this direction.

Screenshot from pythonanywhere.com by author

Overview

  • Create a beginner account
  • Initialize a web app
  • Available Plans
  • Setup Backend
  • Web Configuration

Create a beginner account

Click this link to start: pythonanywhere.com*. You can start with a beginner account. It is totally free for three months and comes with HTTPS encryption and MySQL Database.

Screenshot from pythonanywhere.com by authorScreenshot from pythonanywhere.com by author

You will be redirected and you can start the tour.

Screenshot from pythonanywhere.com by author

Also, do not forget to confirm your email address.

Screenshot from pythonanywhere.com by author

Initialize a web app

(1) We can start now to add a new web app. It is pretty easy. Go to the Web tab.

And add a new web app.

Screenshot from pythonanywhere.com by author

It is opening a window, if you have a paid account, you could enter a customized URL. But, it is not relevant for now, you can modify it later.

Screenshot from pythonanywhere.com by author

Select a python framework, just choose “manual configuration” and select a python version. I chose 3.9.

Screenshot from pythonanywhere.com by authorScreenshot from pythonanywhere.com by author

Et voilà done!

Screenshot from pythonanywhere.com by author

Available Plans

Later, if you feel comfortable, you can do the “Hacker“ Plan for 5 $ USD. Is it enough for running a basic website like a portfolio? I had it for almost one year. Then I changed to the “Web dev” plan because I implemented another webpage. You can also customize any plan by parameters like CPU, the number of apps, or disk space. Compared to other services like DigitalOcean it is way cheaper because you have so much extra included.

Screenshot from pythonanywhere.com by authorScreenshot from pythonanywhere.com by author

Setup Backend

Go to the Console tab and open a new bash console.

Screenshot from pythonanywhere.com by author

Clone my repo from GitHub.

Screenshot from pythonanywhere.com by author

Create a virtual environment for your web app. Here is a good help on how to do it: https://help.pythonanywhere.com/pages/Virtualenvs/.

mkvirtualenv webpage_env --python=/usr/bin/python3.9
Screenshot from pythonanywhere.com by author

Now, we have to install the required libraries:

pip install -r requirements.txt

Web Configuration

Next, head to the tab Web on pythonanywhere and set up the last configurations:

Under Code, set up your “source code” directory, where your app folder is:

Screenshot from pythonanywhere.com by author

You get the information when initializing the virtual environment in your bash console:

Screenshot from pythonanywhere.com by author

Then, configure the wsgi.py as follows:

Screenshot from pythonanywhere.com by author

Below

++++++++++ FLASK +++++++++++

uncomment the lines for import sys and change your working directory as above. Also, edit your import statement. In this case, our run.py file is the main file.

from run import app as application
Screenshot from pythonanywhere.com by author

Comment any other lines and save your changes.

Also, put the directory for your virtual environment under Virtualenv.

Screenshot from pythonanywhere.com by author

Then reload and go to the URL: http://testaccountab2022.pythonanywhere.com/

Screenshot from pythonanywhere.com by author

Enable HTTPS also:

Screenshot from pythonanywhere.com by author

It should display:

Screenshot from pythonanywhere.com by author

Congratulations you are done!

Just modify this example to your needs and run it on pythonanywhere.com* for it.

Thanks for reading my article. I hope you liked it. Please feel free to like, share, and comment on it. Follow me on more content about cryptos, stocks, data analysis, and web development. I am hosting my apps on pythonanywhere.com*.

  • Read my other article about creating a financial dashboard in Flask
  • Check out my webpage and get in touch with me on LinkedIn: antonioblago.com
  • Make a free account on my stock and crypto tracking tool: www.tenxassets.com
  • If you like to develop web apps, I recommend you pythonanywhere.com*

Disclaimer

*affliate links

How do you deploy a Flask in PythonAnywhere?

In this article, I will guide you throughout the process of hosting your Flask Application live on PythonAnywhere for free..
Step 1: Create a requirements. txt. ... .
Step 2: Create a PythonAnywhere account. ... .
Step 3: Configuration for your Web App. ... .
Step 4: Editing our default website. ... .
Step 5: Configuring the root file..

How do I host a web app using PythonAnywhere?

You can create an app to run there by going to the Web tab of your dashboard. From there you click on the "Add a new web app" button, which will pop up a wizard where you can chose the domain to use (if your account allows custom domains) and then select a web application framework.

How do you deploy a Flask API?

Creating a Python Flask API Application (GET and POST API).
Installing the environment needed by Flask to execute the applications..
Creating the virtual environment for Python..
Running the Python application on the ubuntu machine..
Verifying all Required Files to Run the Flask Application Exist..
Building the Docker Image..

Which is better Heroku or PythonAnywhere?

It is an expensive way to tinker and run several small apps. Heroku and PythonAnywhere can be primarily classified as "Platform as a Service" tools. "Easy deployment" is the top reason why over 694 developers like Heroku, while over 4 developers mention "Web apps" as the leading cause for choosing PythonAnywhere.