DEV Community

Cover image for Upgrading a Dockerized Flask App from Python 2.7 to Python 3.7+
Nick Janetakis
Nick Janetakis

Posted on • Originally published at nickjanetakis.com

Upgrading a Dockerized Flask App from Python 2.7 to Python 3.7+

*This article was originally posted on August 27th, 2019 at: https://nickjanetakis.com/blog/upgrading-a-dockerized-flask-app-from-python-2-7-to-python-3-7


Jan 1st 2020 is right around the corner and that's when Python 2.7.x will finally be considered end of life, so now is a great time to start upgrading to Python 3.7+ if you haven't done so already.

In the video listed below, we go over updating a real Flask application from using Python 2.7.16 to 3.7.4. It covers how to do this with Docker, but the same strategy could be applied without Docker.

Through out the video we cover:
  • Picking a Python version to upgrade to
  • Going over which 3rd party package versions only work with specific versions of Python
  • How to perform the upgrade in a production ready (read: safe) way with Docker
  • Encountering and fixing a bunch of errors you'll run across while doing this upgrade
  • How to code your app to work for both versions at once until you retire Python 2.7.x

The demo app we cover on video is the app in my Build a SAAS App with Flask course. It was originally coded to work with Python 2.7.x and early versions of Python 3.x. Over time I have updated it to keep it current and will continue to update it (yay for free updates for life).

Updating Python from 2.7+ to 3.7+ Video

Timestamped Table of Contents

  • 0:33 -- Why bother updating from Python 2.7 to 3.7+?
  • 0:48 -- Upgrading in a production ready way
  • 1:29 -- What's going to be covered in this video?
  • 2:34 -- Downloading a sample Flask project to upgrade
  • 3:29 -- Building the project with Docker so we can run it
  • 4:46 -- Figuring out the latest Docker image for Python 2.7
  • 6:20 -- Watching Docker build Python 2.7.16
  • 6:49 -- Downgrading the pytest library to work with Python 2.7
  • 9:33 -- Watching Docker build again after we fix pytest
  • 10:08 -- Running the example Build a SAAS App with Flask project
  • 10:56 -- Ensuring our test suite passes with Python 2.7
  • 12:04 -- Benefits of using Docker to upgrade Python versions
  • 13:04 -- How to upgrade the Dockerized Flask app from Python 2.7 to 3.7+
  • 14:26 -- Watching Docker build again after upgrading to Python 3.7.4
  • 14:52 -- Running into and fixing a Celery beat schedule error
  • 15:43 -- Running into and fixing a JSON serializable TypeError after upgrading
  • 19:53 -- Another benefit of using Docker is that rolling back to 2.7 is easy
  • 21:33 -- Looking at even more Flask related packages that work in Python 3.7
  • 25:54 -- Using Flask-Limiter to rate limit specific URL endpoints
  • 26:55 -- Scrolling through all of the packages used in the main Flask project
  • 27:19 -- Coding your app to work with both Python 2.7.x and Python 3.7.x

Reference Links

What have you had to do to upgrade Python to 3.7+? Let me know below.

Top comments (0)