Python Streamlit快速构建交互式可视化 Web 应用的完整指南

 更新时间:2025年12月07日 10:11:33   作者:小庄-Python办公  
本篇文章旨在为完全的初学者提供一份详尽、手把手的 Streamlit 入门指南,我们将从安装 Streamlit 开始,逐步构建一个功能丰富的交互式 Web 应用,让你亲身体验 Streamlit 的魔力

引言:告别繁琐,拥抱极简

作为一名 Python 开发者,你是否曾有过这样的困扰:辛辛苦苦完成的数据分析、机器学习模型,想要以一个漂亮、交互式的 Web 应用形式分享给他人,却苦于前端开发(HTML、CSS、JavaScript)的复杂门槛?传统的 Web 框架(如 Flask、Django)固然强大,但对于只想快速展示结果、不愿陷入前端泥潭的 Python 用户来说,学习曲线无疑是陡峭的。

别担心!今天,我们将隆重介绍一个“傻瓜式”的 Python 神器——Streamlit。它彻底改变了 Python 用户构建 Web 应用的方式,让你无需任何前端知识,仅用几行纯 Python 代码,就能创建出专业且高度交互的数据应用和机器学习界面

本篇文章旨在为完全的初学者提供一份详尽、手把手的 Streamlit 入门指南。我们将从安装 Streamlit 开始,逐步构建一个功能丰富的交互式 Web 应用,让你亲身体验 Streamlit 的魔力。

准备工作:你的开发环境就绪了吗

在开始 Streamlit 的奇妙旅程之前,请确保你的开发环境满足以下基本要求:

1. Python 环境

Python 版本: 确保你安装了 Python 3.7 或更高版本。你可以在终端或命令行中输入 python --version 来检查。

虚拟环境(推荐): 强烈建议为每个项目创建一个独立的 Python 虚拟环境。这有助于管理项目依赖,避免不同项目间的包冲突。

创建虚拟环境:python -m venv my_streamlit_env

激活虚拟环境:

  • Windows: .\my_streamlit_env\Scripts\activate
  • macOS/Linux: source my_streamlit_env/bin/activate

2. 包管理器 pip

pip: Python 安装时通常会自带 pip 包管理器。它是我们安装 Streamlit 及其他 Python 库的关键工具。你可以在终端中输入 pip --version 来检查。

3. 代码编辑器

选择一个你喜欢的代码编辑器: Visual Studio Code (VS Code)、PyCharm、Sublime Text 或任何你熟悉的文本编辑器都可以。VS Code 是一个非常流行的选择,因为它轻量且功能强大,拥有丰富的 Python 扩展。

傻瓜式上手指南:六步走,点亮你的第一个应用

第一步:安装 Streamlit

确保你的虚拟环境已激活(如果使用了虚拟环境),然后打开终端或命令行,输入以下命令安装 Streamlit:

pip install streamlit

安装完成后,你可以运行 Streamlit 的内置示例应用来验证安装是否成功:

streamlit hello

如果一切顺利,你的浏览器会自动打开一个新页面,展示 Streamlit 的欢迎界面和一些示例应用。这意味着你已经成功迈出了第一步!

第二步:你的第一个 Streamlit 应用 (Hello World!)

现在,让我们来创建一个最简单的 Streamlit 应用。

在你选择的目录下,创建一个名为 my_first_app.py 的 Python 文件。

将以下代码粘贴到文件中:

# my_first_app.py

import streamlit as st

# 设置页面标题
st.title('我的第一个 Streamlit 应用')

# 添加一个头部
st.header('欢迎来到 Streamlit 的世界!')

# 添加一些普通文本
st.write('这是一个使用 Streamlit 构建的简单 Web 页面。')
st.write('你可以在这里展示你的数据、模型结果等。')

# 使用 Markdown 格式
st.markdown('### 这是一个三级标题')
st.markdown('**加粗文字** 和 *斜体文字*')
st.markdown('你甚至可以插入链接:[Streamlit 官方网站](https://streamlit.io/)')

# 显示一个代码块
st.code("""
def greet(name):
    return f"Hello, {name}!"

print(greet("Streamlit 用户"))
""")

保存文件。

回到终端或命令行,确保你位于 my_first_app.py 文件所在的目录,然后运行以下命令:

streamlit run my_first_app.py

同样,你的浏览器会自动打开一个新页面,显示你刚刚编写的 Streamlit 应用。恭喜!你已经成功创建并运行了你的第一个 Streamlit 应用。

Streamlit 的魔法: 你会发现,当你修改 my_first_app.py 文件并保存时,Streamlit 应用会自动刷新,无需你手动重启服务器。这是 Streamlit 提高开发效率的重要特性之一。

第三步:添加交互式组件

Streamlit 最强大的功能之一就是它能轻松添加各种交互式组件。用户可以通过这些组件与你的应用进行互动,输入数据、选择选项,从而动态地改变应用的内容。

让我们修改 my_first_app.py 文件,添加一些交互组件:

# my_first_app.py (更新版)

import streamlit as st

st.title('交互式 Streamlit 应用示例')
st.header('尝试与这些组件互动吧!')

# 文本输入框 (st.text_input)
user_name = st.text_input('请输入你的名字:', '访客')
st.write(f'你好,{user_name}!欢迎使用 Streamlit。')

# 滑块 (st.slider)
age = st.slider('请选择你的年龄:', 0, 100, 25) # (标签, 最小值, 最大值, 默认值)
st.write(f'你选择的年龄是:{age} 岁。')

# 按钮 (st.button)
if st.button('点击我!'):
    st.write('你点击了按钮!')

# 下拉选择框 (st.selectbox)
option = st.selectbox(
    '你最喜欢的水果是什么?',
    ('苹果', '香蕉', '橙子', '葡萄')
)
st.write(f'你选择的水果是:{option}')

# 复选框 (st.checkbox)
show_details = st.checkbox('显示详细信息')
if show_details:
    st.write('这里是更多详细信息,只有当你勾选了复选框才会显示。')

# 单选按钮组 (st.radio)
gender = st.radio(
    "你的性别是?",
    ('男', '女', '其他')
)
st.write(f"你选择的性别是:{gender}")

# 文件上传器 (st.file_uploader)
uploaded_file = st.file_uploader("上传一个文件")
if uploaded_file is not None:
    st.write("文件已成功上传!文件名为:", uploaded_file.name)
    # 你可以在这里读取文件内容,例如:
    # import pandas as pd
    # df = pd.read_csv(uploaded_file)
    # st.dataframe(df)

保存文件后,刷新你的 Streamlit 应用页面,你会看到这些新添加的交互组件。尝试与它们互动,观察页面内容的动态变化!

第四步:展示数据与图表

Streamlit 在数据展示和可视化方面表现出色,与主流的 Python 数据科学库(如 Pandas、Matplotlib、Plotly)无缝集成。

让我们继续修改 my_first_app.py,添加数据和图表展示功能:

# my_first_app.py (再次更新版)

import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

st.title('数据与图表展示')

# --- 展示数据 ---
st.subheader('展示 DataFrame')
st.write('Streamlit 可以轻松地展示 Pandas DataFrame。')

# 创建一个示例 DataFrame
data = {
    '城市': ['北京', '上海', '广州', '深圳', '杭州'],
    '人口': [2154, 2428, 1530, 1344, 1036], # 单位:万人
    'GDP': [35371, 38701, 25019, 27670, 16106] # 单位:亿元
}
df = pd.DataFrame(data)

st.dataframe(df) # 展示交互式 DataFrame
# st.table(df) # 如果你想要一个静态表格,可以使用 st.table

# --- 绘制图表 ---
st.subheader('绘制折线图')
st.write('Streamlit 内置了简单的图表绘制功能,也支持 Matplotlib、Plotly 等。')

# 生成一些随机数据用于绘图
chart_data = pd.DataFrame(
    np.random.randn(20, 3),
    columns=['a', 'b', 'c']
)

st.line_chart(chart_data) # 使用 Streamlit 内置的折线图

st.subheader('使用 Matplotlib 绘制图表')

# 创建一个 Matplotlib 图表
fig, ax = plt.subplots()
ax.scatter(df['人口'], df['GDP'])
ax.set_xlabel('人口 (万人)')
ax.set_ylabel('GDP (亿元)')
ax.set_title('城市人口与GDP散点图')

st.pyplot(fig) # 将 Matplotlib 图表显示在 Streamlit 中

# 你也可以使用 st.bar_chart, st.area_chart 等 Streamlit 内置图表
# 或者集成 Plotly, Altair, Bokeh 等高级可视化库

保存并刷新应用。现在你的 Streamlit 页面不仅有交互组件,还能漂亮地展示表格数据和各种图表了。

第五步:优化布局与侧边栏

当你的应用内容增多时,合理的布局变得尤为重要。Streamlit 提供了侧边栏(Sidebar)和列(Columns)功能,帮助你更好地组织内容。

# my_first_app.py (最终版)

import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

st.title('Streamlit 应用布局示例')

# --- 侧边栏 (st.sidebar) ---
st.sidebar.header('侧边栏控制面板')

# 将交互组件放入侧边栏
sidebar_name = st.sidebar.text_input('侧边栏:请输入你的名字:', '访客')
st.sidebar.write(f'你好,{sidebar_name}!')

sidebar_age = st.sidebar.slider('侧边栏:选择年龄:', 0, 100, 30)
st.sidebar.write(f'你选择的年龄是:{sidebar_age} 岁。')

# --- 主区域内容 ---
st.header('主内容区域')

st.write(f'从侧边栏获取的名字是:**{sidebar_name}**')
st.write(f'从侧边栏获取的年龄是:**{sidebar_age}**')

# --- 列布局 (st.columns) ---
st.subheader('使用列布局')

# 创建两列,比例为 1:2
col1, col2 = st.columns([1, 2])

with col1:
    st.write('### 第一列')
    st.write('这是第一列的内容,通常用于放置较小的组件或描述性文本。')
    st.button('点击这里 (第一列)')

with col2:
    st.write('### 第二列')
    st.write('这是第二列的内容,可以放置图表或更复杂的数据展示。')
    # 在第二列中展示一个 DataFrame
    data_col2 = pd.DataFrame({
        '项目': ['A', 'B', 'C', 'D'],
        '值': np.random.randint(1, 100, 4)
    })
    st.dataframe(data_col2)

st.write('---') # 分隔线

# --- 展开器 (st.expander) ---
st.subheader('使用展开器')
with st.expander("点击查看更多信息"):
    st.write("这里是隐藏起来的详细内容,点击上方标题即可展开或收起。")
    st.success("你发现了一个秘密!")

# --- 状态显示 (st.info, st.success, st.warning, st.error) ---
st.subheader('信息提示')
st.info('这是一个普通的信息提示。')
st.success('操作成功!')
st.warning('请注意,这里有一个警告!')
st.error('发生了一个错误!')

st.write('---')

# --- 进度条 (st.progress) ---
st.subheader('进度条示例')
progress_text = "操作进行中,请稍候..."
my_bar = st.progress(0, text=progress_text)

for percent_complete in range(100):
    import time
    time.sleep(0.02) # 模拟耗时操作
    my_bar.progress(percent_complete + 1, text=progress_text)
st.success("任务完成!")

保存并刷新应用。你会看到页面左侧多了一个侧边栏,并且主内容区域被分成了两列,内容组织更加清晰。展开器和各种提示信息也让应用更加友好。

第六步:运行与分享

你已经学会了如何构建一个 Streamlit 应用,现在是时候了解如何运行它以及如何分享给他人了。

本地运行:

在终端中,进入你的 .py 文件所在的目录。

运行命令:streamlit run your_app_name.py (例如:streamlit run my_first_app.py)

Streamlit 会在本地启动一个 Web 服务器,并在你的默认浏览器中打开应用。你会在终端看到类似这样的输出:

You can now view your Streamlit app in your browser.

Local URL: http://localhost:8501
Network URL: http://192.168.1.100:8501

Local URL (本地地址): 只有你当前设备可以访问。

Network URL (网络地址): 在同一局域网内的其他设备(如手机、其他电脑)可以通过这个地址访问你的应用。

分享你的应用:

  • Streamlit Cloud (推荐): Streamlit 官方提供了 Streamlit Cloud 服务,让你可以免费将你的 Streamlit 应用部署到云端,并生成一个公开可访问的 URL。你只需要将你的应用代码上传到 GitHub 仓库,然后通过 Streamlit Cloud 平台进行部署即可。这是分享应用最简单、最推荐的方式。
  • 其他部署方式: 对于更高级的用户,Streamlit 应用也可以部署到 Docker 容器、Heroku、AWS、GCP 等云平台。但这超出了本篇初学者指南的范围。

常见问题与排错

1. 应用不更新

Streamlit 默认会监听你的 .py 文件变化并自动刷新。如果遇到不更新的情况:

  • 确保文件已保存。
  • 检查终端是否有错误信息。 有时代码错误会导致应用无法正常刷新。
  • 手动刷新浏览器。 (Ctrl+R / Cmd+R)
  • 清除缓存: 在 Streamlit 应用页面,点击右上角的 菜单 -> Clear cache
  • 重启 Streamlit 服务器: 在终端中按 Ctrl+C 停止应用,然后重新运行 streamlit run your_app.py

2. 依赖包未安装

如果你的应用使用了 Pandas、Matplotlib 等库,但运行报错 ModuleNotFoundError,说明这些库没有安装。

  • 激活你的虚拟环境。
  • 使用 pip 安装缺失的包: 例如 pip install pandas matplotlib
  • 推荐使用 requirements.txt 在项目根目录创建一个 requirements.txt 文件,列出所有依赖包及其版本(例如 pandas==1.5.3)。然后通过 pip install -r requirements.txt 一次性安装所有依赖。

3. 端口被占用

如果 Streamlit 提示端口 8501 被占用,它通常会自动尝试使用下一个可用的端口(如 8502)。你也可以在运行命令时手动指定端口:

streamlit run your_app.py --server.port 8888

4.streamlit hello运行失败

  • 检查 Streamlit 是否正确安装: 运行 pip show streamlit,如果未安装会有提示。
  • 检查 Python 环境: 确保你正在使用的 Python 环境是安装了 Streamlit 的环境(特别是当你使用了虚拟环境时)。

总结

Streamlit 的出现,无疑是 Python 数据科学领域的一大福音。它让数据科学家、分析师和机器学习工程师能够:

  • 告别前端: 专注于 Python 代码,无需学习 HTML、CSS、JavaScript。
  • 快速迭代: 实时刷新机制让你在开发过程中即时看到改动效果。
  • 交互性强: 丰富的组件库让你的应用充满活力。
  • 部署简单: Streamlit Cloud 提供一键部署,轻松分享你的成果。

Streamlit 不仅仅是一个工具,它更是一种理念——让数据和模型的力量更容易被发现、被理解、被分享。现在,就请你开始动手实践,用 Streamlit 创造出属于你自己的精彩 Web 应用吧!祝你编码愉快!

到此这篇关于Python Streamlit快速构建交互式可视化 Web 应用的完整指南的文章就介绍到这了,更多相关Python Streamlit交互式Web应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python psutil模块使用方法解析

    python psutil模块使用方法解析

    这篇文章主要介绍了python psutil模块使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • pandas报错AttributeError: DataFrame object has no attribute ix问题

    pandas报错AttributeError: DataFrame object has&

    这篇文章主要介绍了pandas报错AttributeError: DataFrame object has no attribute ix问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python基于进程池实现多进程过程解析

    Python基于进程池实现多进程过程解析

    这篇文章主要介绍了Python基于进程池实现多进程过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Python中xlsx文件转置操作详解(行转列和列转行)

    Python中xlsx文件转置操作详解(行转列和列转行)

    很多时候我们处理的Excel表格并不是我们想要的样子,需要将表格的形式进行相应转换后进行数据分析操作,下面这篇文章主要给大家介绍了关于Python中xlsx文件转置操作(行转列和列转行)的相关资料,需要的朋友可以参考下
    2022-07-07
  • Python+Appium自动化操作微信的教程分享

    Python+Appium自动化操作微信的教程分享

    Appium 是一个开源的自动化测试工具,支持 Android、iOS 平台上的原生应用,支持 Java、Python、PHP 等多种语言。本文主要介绍了Python+Appium自动化操作微信的教程,希望对大家有所帮助
    2023-01-01
  • python爬取各省降水量及可视化详解

    python爬取各省降水量及可视化详解

    本文是学习python,故选取了python最常用的爬虫作为实操训练同时,还添加了可视化和GUI入门的内容使爬取的内容应用更丰富,需要的朋友可以参考下
    2021-04-04
  • Python 的lru_cache装饰器使用简介

    Python 的lru_cache装饰器使用简介

    这篇文章主要介绍了Python 的lru_cache 装饰器使用简介,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • Python多分支语句的三种结构详解

    Python多分支语句的三种结构详解

    这篇文章主要介绍了Python多分支语句的三种结构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python实现自动打开电脑应用的示例代码

    Python实现自动打开电脑应用的示例代码

    这篇文章主要介绍了Python实现自动打开电脑应用的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Pandas多列值合并成一列的实现

    Pandas多列值合并成一列的实现

    本文主要介绍了Pandas多列值合并成一列的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论