Streamlit environment
Use whatever dependency management the project already has (pip, poetry, conda, etc.). If starting fresh and uv is available, it's a good default—fast, reliable, and creates isolated environments automatically.
If uv is not installed, ask the user before installing it.
Using uv
If uv is available, here's how to set up a Streamlit project.
Quick start (venv only)
For simple apps, just create a virtual environment:
uv venv source .venv/bin/activate # or .venv\Scripts\activate on Windows uv pip install streamlit
Run with:
streamlit run streamlit_app.py
Full project setup
For larger projects or when you need reproducible builds:
uv init my-streamlit-app cd my-streamlit-app uv add streamlit
This creates:
- •
pyproject.tomlwith dependencies - •
uv.lockfor reproducible builds - •
.venv/virtual environment
Run with:
uv run streamlit run streamlit_app.py
With options
Avoid setting options unless you have a specific reason:
streamlit run streamlit_app.py --server.headless true # Only for automated/CI environments
Add dependencies
# With venv approach uv pip install plotly snowflake-connector-python # With full project (uv init) uv add plotly snowflake-connector-python
Project structure
Keep it simple. For most apps:
my-streamlit-app/ ├── .venv/ └── streamlit_app.py
Only add more when needed:
- •
app_pages/→ Only for multi-page apps - •
.streamlit/config.toml→ Only if customizing theme or settings - •
.streamlit/secrets.toml→ Only if using secrets (add to.gitignore) - •
pyproject.toml→ Only if usinguv initfor reproducible builds
Convention
Name your main file streamlit_app.py for consistency. This is what Streamlit expects by default.
What goes in the main module:
- •When using navigation: it's a router that defines pages and runs them
- •When there's no navigation: it's the home page with your main content
pyproject.toml Example
[project]
name = "my-streamlit-app"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
"streamlit>=1.40.0",
"plotly>=5.0.0",
"snowflake-connector-python>=3.0.0",
]
[tool.uv]
dev-dependencies = [
"pytest>=8.0.0",
]