I need to run my app as a module with python -m streamlit run folder/app,py
so that importing works. Without this, having from folder import func
inside my streamlit app gives a ModuleNotFound
error
Hi @batman,
Let me break down your questions into 2 and provide answers below.
- I need to run my app as a module with
python -m streamlit run folder/app,py
so that importing works.
To run Streamlit apps in the terminal, you need to run the following:
streamlit run app.py
- Without this, having
from folder import func
inside my streamlit app gives aModuleNotFound
error
In order to make use of custom functions inside your Streamlit apps, you can do the following:
Step 1. Create a utilities.py
file (can also be named anything you like) that stores your custom functions.
Step 2. From within your app.py
file make sure to use the following import statements to use your custom functions:
import streamlit as st
from utilities import your_custom_function
Oh hey @dataprofessor! I’ve really enjoyed your tutorials
My utilities are already in a different file but it’s within a folder. So my old directory structure had utilities.py
in root but the new structure it is now tools/utilities.py
The problem I have is that when running streamlit I get a module not found error, but when I run as a module with python -m streamlit run devapp/app.py
it works as expected
Hey glad to hear that.
For the import statement inside your app.py file, can you try from tools.utilities import your_custom_function
Yes, that’s how I am currently importing
Using this, running with streamlit run
gives me a module not found error. The import works when using python -m streamlit run
I think it may be the relative path that may be the cause of the problem. It seems that your app is at devapp/app.py
while your custom functions are inside tools/utilities.py’. Could you try moving the latter to
devapp/tools/utilities.py`.
Yes; running as a module with -m
allows the relative imports to work
Moving tools
into devapp
would be ideal but I don’t think that’ll work for my particular problem (open to suggestions!) since I did this to run multiple Streamlit app from one repo
A simplified look at my directory structure:
tools/
- utils.py
- utils2.py
devapp/
- pages/
- app.py
publicapp/
- app.py
Having tools inside devapp
means I’d have to duplicate tools in both devapp
and publicapp
Do you think there’s a better way to do this? Or maybe Streamlit cloud is not the way to go for this
Hi, thanks for the detailed account of the directory structure.
Perhaps, you can also try exporting your module’s path to system path as detailed in How can I make Streamlit watch for changes in other modules I'm importing in my app? - Streamlit Docs
Although the above may help address the local use of Streamlit as for using via Streamlit Cloud, it supports hosting a single page app or a multipage app. From the directory structure, it seems to have both single page app (publicapp) and the multipage app (devapp). This might be best hosted on a custom VPS.
Another possibility could be to merge both publicapp and devapp so that perhaps devapp could reside as part of the multipage app.
This was initally what I wanted to do but devapp has pages
and publicapp doesn’t so that messes things up when they are the in the same directory unfortunately
I tried to run streamlit from root by adding authorise.py
but that causes a problem with with the page config
I’m guessing this is because it’s already considered set since it ran from root
tools/
- utils.py
- utils2.py
devapp/
- pages/
- app.py
publicapp/
- app.py
authorise.py
This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.