question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Streamlit App not deploying on Heroku

See original GitHub issue

Summary

I am trying to deploy a ML model using Streamlit and Pycaret on Heroku for the first time.

When I try deploying the app, I get the following error: ModuleNotFoundError: No module named ‘pycaret.internal’

Traceback:


    Traceback:
    File "/app/.heroku/python/lib/python3.6/site-packages/streamlit/ScriptRunner.py", line 322, in _run_script
        exec(code, module.__dict__)
    File "/app/Final.py", line 11, in <module>
        tuned_cat=joblib.load('Cat.pkl')
    File "/app/.heroku/python/lib/python3.6/site-packages/joblib/numpy_pickle.py", line 585, in load
        obj = _unpickle(fobj, filename, mmap_mode)
    File "/app/.heroku/python/lib/python3.6/site-packages/joblib/numpy_pickle.py", line 504, in _unpickle
        obj = unpickler.load()
    File "/app/.heroku/python/lib/python3.6/pickle.py", line 1050, in load
        dispatch[key[0]](self)
    File "/app/.heroku/python/lib/python3.6/pickle.py", line 1338, in load_global
        klass = self.find_class(module, name)
    File "/app/.heroku/python/lib/python3.6/pickle.py", line 1388, in find_class
        __import__(module, level=0)

Final.py:

    import streamlit as st
    import joblib
    
    from pycaret.classification import *
    
    
    tuned_cat=joblib.load('Cat.pkl')
    
    
    import tensorflow as tf
    physical_devices = tf.config.list_physical_devices('CPU') 
    
    
    
    def run():
    
    
        add_selectbox = st.sidebar.selectbox(
        "What would you like to do?",
        ("Online Prediction","Batch Prediction"))
    
        st.sidebar.info('This app is created to predict if the applicant should be granted a loan or not.')
        
    
        st.title("Loan Prediction App")
        
        if add_selectbox == 'Online Prediction':
            
            gender = st.selectbox('Gender',['Female','Male'])
            married = st.selectbox('Married',['No','Yes'])
            depend = st.selectbox('Dependents',['0','1','2','3+'])
            edu = st.selectbox('Education',['Graduate','Not Graduate'])
            self = st.selectbox('Self Employed',['No','Yes'])
            app_inc = st.number_input ('Applicant Income')
            co_inc = st.number_input ('Coapplicant Income')
            amt = st.number_input ('Loan Amount')
            term = st.number_input ('Loan Amount Term')
            credit = st.selectbox('Credit History',['0','1'])
            prop_are = st.selectbox('Property Area',['Rural','Semiurban','Urban'])
    
            output=""
    
            test_df = pd.DataFrame()
            test_df['Gender']= [gender]
            test_df['Married']=[married]
            test_df['Dependents']=[depend] 
            test_df['Education']=[edu]
            test_df['Self_Employed']=[self] 
            test_df['ApplicantIncome']=[app_inc] 
            test_df['CoapplicantIncome']=[co_inc] 
            test_df['LoanAmount']=[amt] 
            test_df['Loan_Amount_Term']=[term] 
            test_df['Credit_History']=[credit] 
            test_df['Property_Area']=[prop_are]      
            
    
            if st.button("Predict"):
                Cat_pred=predict_model(tuned_cat,data=test_df)['Label']
                
                output = Cat_pred.values
                
                if(output==0):
                    text="Rejected"
                    st.error(text)
                    
                elif(output==1):
                    text="Approved"
                    st.success(text)
     
        
        if add_selectbox == 'Batch Prediction':
    
            file_upload = st.file_uploader("Upload excel file for predictions", type=["xlsx"])
    
            if file_upload is not None:
                data = pd.read_excel(file_upload)
                
                st.success('File uploaded successfully!')
                
                Cat_pred=predict_model(tuned_cat,data=data)['Label']
                
                data['Prediction']=Cat_pred
    
                st.write(data)
                st.markdown(get_table_download_link(data), unsafe_allow_html=True)
    
    
    import base64
    
    def get_table_download_link(df):
        """Generates a link allowing the data in a given panda dataframe to be downloaded
        in:  dataframe
        out: href string
        """
        csv = df.to_csv(index=False)
        b64 = base64.b64encode(
            csv.encode()
        ).decode()  # some strings <-> bytes conversions necessary here
        return f'<a href="data:file/csv;base64,{b64}" download="Load_Predictions.csv">Download csv file</a>'
    
    
    
    if __name__ == '__main__':
        run()

Expected behavior:

The app should be deployed on Heroku as it works fine on local computer. image

Actual behavior:

image

Debug info

I have the following dependencies in the requirements.txt file:

pycaret==1.0.0
streamlit==0.58.0

I am using Conda and I had to go with the pycaret version 1.0 because when I chose the latest version the slug size on Heroku would go beyond 500M and it would not deploy. Compiled slug size: 552M is too large (max is 500M).

Link to Github

Issue Analytics

  • State:closed
  • Created 3 years ago
  • Comments:6 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
jroescommented, Dec 28, 2020

I was able to reproduce this, here’s the Heroku build output, in case it helps:

https://gist.github.com/jroes/a0c0d2ed7f5fed8efb53eae0bd17ca33

I also tried using the latest version of Streamlit, but couldn’t deploy due to slug size:

https://gist.github.com/jroes/97994971cad86a50f80e32c4494c9610

0reactions
randyzwitchcommented, Oct 25, 2021

In this case, since the issue appears to be a slug size issue with Heroku, this is beyond the scope of the Streamlit project

Read more comments on GitHub >

github_iconTop Results From Across the Web

Streamlit App not deploying to heroku
Hey I was trying to deploy my app to Heroku but it is giving me this error in the build logs 2021-08-10T11:04:39.246704+00:00 heroku[router]:...
Read more >
Issue with serving a streamlit Heroku app in a browser
Hi guys, I am having problems with serving my app in a browser. I deployed it successfully with Heroku CLI but keep getting...
Read more >
Streamlit app works locally but not on Heroku
I have a stock prediction code using streamlit and fbprophet that is working locally, and when I deploy it on Heroku, it says...
Read more >
Deploy to Heroku failed - Streamlit
It has nothing to do with the app itself, it is a dependency issue of streamlit that popped up yesterday, due to a...
Read more >
Not able to deploy to Heroku | Error in creating config.toml
I have been working on deploying a simple streamlit app to heroku but I'm facing problems while deploying it. Have a look at...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found