Deploying cloud-based Python web apps with Streamlit sharing
Tags: streamlit, python, webdev, cloud
Published: 2024-02-05 06:28:49

Streamlit is an open-source Python library that makes it easy to create and share beautiful, custom web apps for machine learning and data science. With Streamlit, you can turn Python scripts into web apps in just a few minutes without knowing any JavaScript or HTML.

One of the best features of Streamlit is Streamlit sharing, which allows you to deploy your Streamlit apps for free instantly. Streamlit sharing handles all the complexity of deployment and hosting so you can focus on building your apps.

In this article, we’ll walk through how to use Streamlit sharing to deploy a simple Python web app powered by Streamlit. We’ll cover:


- Creating a basic Streamlit app
- Signing up for Streamlit sharing
- Deploying the app with one click
- Customizing and updating the deployed app
- Best practices for production Streamlit apps
    
## Creating a Basic Streamlit App

First, let’s create a simple Streamlit app that we can deploy. We’ll build an app that classifies iris flowers based on sepal/petal measurements using [sklearn’s iris dataset](https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html) and a random forest model.

Import the necessary libraries:

    import streamlit as st
    import pandas as pd 
    from sklearn.datasets import load_iris
    from sklearn.ensemble import RandomForestClassifier

Define a function to make predictions:

    def prediction(sepal_length, sepal_width, petal_length, petal_width):  
    
        # load dataset 
        data = load_iris()
        # prepare data
        X = data.data 
        Y = data.target
        # model building
        clf = RandomForestClassifier() 
        clf.fit(X, Y)
    
        # make predictions 
        prediction = clf.predict([[sepal_length, sepal_width, petal_length, petal_width]])
        prediction = prediction[0]
    
        return prediction

In our Streamlit app, we’ll create sliders to input the flower measurements then display the predicted species:

    # Streamlit app 
    st.write("""
    # Iris Flower Species Prediction App
    """)
    
    sepal_length = st.slider('Sepal length', 0.0, 10.0, 5.0)  
    sepal_width = st.slider('Sepal width', 0.0, 10.0, 5.0)
    petal_length = st.slider('Petal length', 0.0, 10.0, 5.0)  
    petal_width = st.slider('Petal width', 0.0, 10.0, 5.0)
    
    species_type = prediction(sepal_length, sepal_width, petal_length, petal_width)  
    
    st.write('Predicted iris species:', species_type)

That’s our basic app! Next, let’s look at deploying it for free with Streamlit sharing.


## Signing Up for Streamlit Sharing

To deploy our Streamlit app, we first need to sign up for a free Streamlit sharing account:


- Go to [streamlit](http://share.streamlit.io) and click “Sign up”
![](https://paper-attachments.dropboxusercontent.com/s_F2D94C296BCED70C33CA2FA320B869DB3A24566CD0B3DF29CDF956504DF402BB_1707062561743_Screenshot+2024-02-04+at+17.02.34.png)

- Sign up with your Email or with GitHub.
![](https://paper-attachments.dropboxusercontent.com/s_F2D94C296BCED70C33CA2FA320B869DB3A24566CD0B3DF29CDF956504DF402BB_1707062469585_Screenshot+2024-02-04+at+17.00.57.png)

- A Streamlit account will automatically be created after you fill in your details. 
    

That’s all there is to it! We now have everything we need to deploy apps to the cloud instantly.
Deploying the App

With just a single terminal command, we can now deploy our app to the cloud via Streamlit sharing:


    $ streamlit run my_app.py --global.sharingMode=s3

The `--global.sharingMode=s3` flag tells Streamlit to deploy our app. We’ll be prompted to enter a unique app name and select a sharing access level. Let’s name our app “iris-classifier” and make it publicly viewable.

Once deployed, we can access our live web app from the app URL printed in the terminal and also view it by going to [streamlit](http://share.streamlit.io) and selecting our app. It’s that simple to create and deploy cloud-hosted Streamlit apps!


## Customizing and Updating

Our app is now live, but the work doesn’t stop there. Streamlit sharing gives us some great benefits when customizing and iteratively improving our app over time:

**Automatic updates** - Any changes we push to our code are automatically redeployed. There’s no need to redeploy each time manually.

**Version control** - Streamlit keeps the version history of our deployed apps, allowing us to revert to older versions or deploy side-by-side versions for testing.

**Custom domains** - We can associate our own custom domain name with apps, providing branded, professional hosting.

**Private apps** - Streamlit supports restricted app access through authorization and teams, which is useful for internal web tools.

By handling deployment details behind the scenes, Streamlit sharing lets us focus on rapidly developing and refining our app.


## Best Practices for Production

Here are a few key tips to follow when developing production-level Streamlit apps:

- **Validate input data** - Use Streamlit components like input sliders/text areas to constrain what values a user can provide. Validate malformed inputs server-side before passing to models.
- **Handle errors gracefully** - Use try/except blocks and Streamlit error components to account for any failures and provide helpful error messages to users.
- **Structure for scale** - Break code into modules to better manage complex logic. Use Streamlit components for reusable UI elements.
- **Monitor usage** - Integrate GA for usage analytics. Use Streamlit session states to track user state. Monitor logs for any application issues.
- **Update dependencies** - Streamlit provides images with the latest Python data science packages. Manage dependencies explicitly for production.
    

Following best practices like these, we can take our Streamlit prototype apps and harden them for real-world usage.


## Conclusion

With Streamlit’s incredibly simple deployment model, we can go from idea to deployed web app in just minutes. By handling all DevOps complexity behind its easy-to-use interface, Streamlit allows us to focus on rapidly developing and iterating data apps.

Some key highlights:

- Instantly deploy Python scripts as web apps with `streamlit run`
- Free cloud hosting through Streamlit sharing
- Automatic updates and version control
- Ability to fully customize and refine over time
- Best practices available for hardened production apps
    

The power of Streamlit is how it completely changes the game for creating and deploying data-driven web tools. Streamlit allows us to create various web apps for analysis and ML model serving by putting deployment on autopilot. The sky's the limit on what you can build and easily deploy with Streamlit!

If you find this post exciting, find more exciting posts on [Learnhub Blog](https://blog.learnhub.africa/); we write everything tech from [Cloud computing](https://blog.learnhub.africa/category/cloud-computing/) to [Frontend Dev](https://blog.learnhub.africa/category/frontend/), [Cybersecurity](https://blog.learnhub.africa/category/security/), [AI](https://blog.learnhub.africa/category/data-science/), and [Blockchain](https://blog.learnhub.africa/category/blockchain/).

## **Resource**
- [Getting Started with Programming](https://www.codecademy.com/learn/learn-how-to-code?periods=year&plan_id=proGoldAnnualV2&utm_source=pepperjam&utm_medium=affiliate&utm_term=96525&clickId=4438617034&pj_creativeid=8-12462&pj_publisherid=96525)
- [Javascript Email with Nodemailer](https://blog.learnhub.africa/2023/06/08/4-javascript-email-frameworks-nodemailer-sendgrid-smtp-js-and-mailgun/)
- [How to send an email in node.js using nodemailer](https://blog.learnhub.africa/2023/01/18/how-to-send-an-email-in-node-js-using-nodemailer/)
- [Javascript Array method](https://www.w3schools.com/js/js_arrays.asp)
- [20 Best React JavaScript Frameworks For 2023](https://blog.learnhub.africa/2023/05/09/20-best-javascript-frameworks-for-2023/)