Search code examples
pythonauthenticationcachingdeprecatedstreamlit

st.cache_data is deprecated in streamlit


I have the code below that reads the user's login and password from a mainfile.csv using streamlit.

This code raises a deprecation warning, saying that st.cache_data is deprecated in streamlit:

# Define the file path
FILE_PATH = "/content/drive/MyDrive/Streamlit/login/mainfile.csv"

# Use st.cache_data for data loading
@st.cache_resource
def load_data(file_path):
    try:
        df = pd.read_csv(file_path)
        return df
    except Exception as e:
st.error(f"Error loading data: {e}")
return pd.DataFrame()  

I tried many ways to solve it like upgrading streamlit, or changing the version of streamlit. I also tried to use @st.cache, @st.cache_resources (in place of @st.cache_data) but it didn't work.

Every time it shows that @st.cache is deprecated.


Solution

  • The issue arises because you are using @st.cache_resource for caching data, which is meant for resources that don't need to be recomputed often (e.g., database connections). For data-loading functions, the correct decorator is @st.cache_data, which replaced @st.cache in newer Streamlit versions.

    Here’s how you can modify your code:

    import streamlit as st
    import pandas as pd
    
    # Define the file path
    FILE_PATH = "/content/drive/MyDrive/Streamlit/login/mainfile.csv"
    
    # Use st.cache_data for data loading
    @st.cache_data
    def load_data(file_path):
        try:
            df = pd.read_csv(file_path)
            return df
        except Exception as e:
            st.error(f"Error loading data: {e}")
            return pd.DataFrame() 
    

    For more details, you can refer to the official Streamlit documentation: Streamlit Caching.