『玩转Streamlit』--环境配置

尽管Streamlit的使用非常直观,但正确的环境配置对于充分发挥其潜力仍然至关重要。

本篇将介绍如何从头开始配置Streamlit环境,以及Streamlit开发过程中常用的几个命令。

最后通过一个简单的示例演示开发Streamlit应用的过程。

1. 安装

Streamlit是纯Python的框架,只依赖Python环境,

目前最新的Streamlit v1.39版本,需要Python3.8及以上的版本。

Streamlit已经发布到pypi,使用pip安装非常简单。

pip install streamlit 

安装完成后,验证是否安装成功使用下面的命令:

streamlit hello

这个Streamlit中自带的示例工程,如果安装成功,执行之后会自动打开浏览器,

http://localhost:8501/显示示例工程。

一共有4个Demo,可以从左半边的菜单中点开感受下Streamlit的魅力。

2. 常用子命令

Streamlit子命令不多,通过--help参数可以查看。

$  streamlit --help
Usage: streamlit [OPTIONS] COMMAND [ARGS]...

  Try out a demo with:

      $ streamlit hello

  Or use the line below to run your own script:

      $ streamlit run your_script.py

Options:
  --log_level [error|warning|info|debug]
  --version                       Show the version and exit.
  --help                          Show this message and exit.

Commands:
  activate  Activate Streamlit by entering your email.
  cache     Manage the Streamlit cache.
  config    Manage Streamlit's config settings.
  docs      Show help in browser.
  hello     Runs the Hello World script.
  help      Print this help message.
  run       Run a Python script, piping stderr to Streamlit.
  version   Print Streamlit's version number.

最常用的是run子命令,这是用来执行Streamlit App的,run子命令本身也有很多的参数,

比如,App的IP地址,端口,主题,日志,自动重载脚本等等。

下面的命令可以查看run子命令的所有参数。

$  streamlit run --help

此外,config子命令可以快速查看当前对Streamlit的所有配置。

$  streamlit config show

cache子命令可以用来快速清理缓存。

$  streamlit cache clear

开发过程中,用的较多的就是上面三个子命令。

3. 第一个App

最后,我们用Streamlit来做一个简单的数据分析的应用,以此体会下它其强大之处。

3.1. 创建测试数据

首先创建一些测试数据,通过pandasnumpy创建20条时间序列数据。

# 创建时间序列测试数据
A = np.random.randint(1, 80, size=(20, 1))
B = np.random.randint(20, 100, size=(20, 1))
df = pd.DataFrame()
df.index = pd.date_range("2024/10/01", periods=20)
df["A"] = A
df["B"] = B

A列B列是随机生成的数据,每次运行都会改变。

3.2. 用表格数据

接下来就是Streamlit登场的时候了,页面上显示pandasDataFrame数据很简单,就一行代码。

# 显示数据
st.table(df)

浏览器访问:http://localhost:8501/

可以加个标题,稍微美化一下。

st.header("第一个APP")
st.divider() # 一条分割线

3.3. 用折线图显示数据

Streamlit表格显示数据只要一行代码,同样,用折线图显示数据也只要一行代码。

# 显示折线图
st.line_chart(df)

3.4. 动态改变数据范围

接下来,添加Streamlit的控件,让我们可以动态的改变表格和折线图中的数据范围。

date_range = st.slider(
    "日期范围",
    min_value=datetime(2024, 10, 1),
    max_value=datetime(2024, 10, 20),
    value=(datetime(2024, 10, 1), datetime(2024, 10, 20)),
)
st.write(date_range)

添加一个数据范围的控件,范围改变时,用date_range的实际值去更新页面要显示的数据。

# graph_data是按日期过滤后的数据
graph_data = df.copy()
graph_data = graph_data[graph_data.index >= date_range[0]]
graph_data = graph_data[graph_data.index <= date_range[1]]

表格和折线图中的数据改成上面的graph_data

# 显示折线图
st.line_chart(graph_data)

# 显示数据
st.table(graph_data)

这样,我们就可以在页面上动态改变数据范围,同时更新数据表格和折线图。

4. 总结

短短几行代码,就生成了一个展示DataFrame数据的Web应用

传统的Web开发方式相比,不需要任何前端的知识(HTMLCSSjavascript等),

而且,通过使用封装好的控件(tableline_chart等),开发效率极高。

Jupyter Notebook相比,为用户提供了一个友好的操作界面,简单直观。

不需要用户通过修改代码来尝试不同的图表。

示例最终的完整代码如下:

import streamlit as st
import pandas as pd
import numpy as np
from datetime import datetime

# 创建时间序列测试数据
A = np.random.randint(1, 80, size=(20, 1))
B = np.random.randint(20, 100, size=(20, 1))
df = pd.DataFrame()
df.index = pd.date_range("2024/10/01", periods=20)
df["A"] = A
df["B"] = B

st.header("第一个APP")
st.divider()

# 增加日期范围动态调整
date_range = st.slider(
    "日期范围",
    min_value=datetime(2024, 10, 1),
    max_value=datetime(2024, 10, 20),
    value=(datetime(2024, 10, 1), datetime(2024, 10, 20)),
)
st.write(date_range)

graph_data = df.copy()
graph_data = graph_data[graph_data.index >= date_range[0]]
graph_data = graph_data[graph_data.index <= date_range[1]]

# 显示折线图
st.line_chart(graph_data)

# 显示数据
st.table(graph_data)

run子命令来运行这个脚本即可。

streamlit run main.py
原创作者: wang_yb 转载于: https://www.cnblogs.com/wang_yb/p/18471660
<think>好的,用户之前询问了Monaco Editor的命令,现在又转向比较streamlit-monaco和streamlit-code-editor这两个库。我需要先了解这两个库的区别和各自的优缺点。 首先,用户可能是在开发Streamlit应用时需要嵌入代码编辑器,所以需要选择合适的库。我需要确认这两个库的功能、易用性、依赖以及社区支持情况。 streamlit-monaco是基于Monaco Editor的,而Monaco是VS Code的编辑器,功能强大,支持语法高亮、智能提示等。而streamlit-code-editor可能是一个更轻量级的组件,可能功能较少但简单易用。 接下来,我需要比较它们的核心功能,比如是否支持代码高亮、自动补全、主题定制、多语言支持等。还要看看它们的安装和配置复杂度,是否依赖额外资源,比如streamlit-monaco可能需要加载Monaco的资源,影响加载速度。 另外,用户可能关心社区维护情况,比如GitHub的star数、最近更新时间,是否有活跃的维护者。这会影响长期使用的可靠性。 还要考虑使用场景,如果用户需要复杂的代码编辑功能,比如IDE级别的,那么streamlit-monaco更合适;如果只是简单编辑,streamlit-code-editor可能更合适。 需要检查是否有错误处理、自定义命令支持,以及与其他Streamlit组件的兼容性。比如用户之前提到的Monaco命令,可能在streamlit-monaco中更容易实现。 最后,总结两者的优缺点,给出建议,帮助用户根据具体需求选择。</think>以下是针对 `streamlit-monaco` 与 `streamlit-code-editor` 的详细对比分析: --- ### 一、核心定位对比 | **特性** | **streamlit-monaco** | **streamlit-code-editor** | |-------------------------|-----------------------------------------------|-----------------------------------------------| | **底层技术** | 基于 VS Code 的 Monaco Editor(工业级编辑器) | 基于 CodeMirror 或轻量级实现(轻量化编辑器) | | **目标场景** | 需要复杂代码编辑的 IDE 级场景 | 简单代码/文本展示与基础编辑 | | **功能复杂度** | 高(支持智能提示、语法检查等) | 低(基础高亮+编辑) | --- ### 二、功能特性对比 #### 1. **代码智能支持** - **Monaco**: - ✅ 自动补全(IntelliSense) - ✅ 语法错误检查(Linting) - ✅ 多语言支持(支持 50+ 编程语言) - ✅ 代码折叠/大纲视图 ```python # streamlit-monaco 配置智能提示 monaco_editor(..., language="python", suggest=True) ``` - **Code Editor**: - ❌ 无内置智能提示 - ⚠️ 仅基础语法高亮 #### 2. **自定义能力** - **Monaco**: - ✅ 支持自定义主题(需配置 `theme: "vs-dark"`) - ✅ 可扩展快捷键绑定 - ✅ 支持多光标编辑 ```python # 添加自定义快捷键 commands = [{"command": "editor.action.formatDocument", "keybind": "Ctrl+Shift+F"}] ``` - **Code Editor**: - ⚠️ 主题定制有限 - ❌ 无高级编辑功能 #### 3. **性能表现** | **指标** | **Monaco** | **Code Editor** | |----------------|------------|-----------------| | 初始加载速度 | 较慢(需加载 Monaco 资源) | 快(轻量级) | | 内存占用 | 高(约 5-10MB) | 低(<1MB) | --- ### 三、安装与使用成本 #### 1. **依赖关系** - **Monaco**: ```bash pip install streamlit-monaco # 需要额外加载 Monaco 的静态资源(可能影响 CDN 依赖) ``` - **Code Editor**: ```bash pip install streamlit-code-editor # 无额外依赖 ``` #### 2. **API 复杂度** - **Monaco**: ```python from streamlit_monaco import monaco_editor code = monaco_editor(value="", height=500, language="python", theme="vs-dark") ``` - **Code Editor**: ```python from streamlit_code_editor import code_editor code = code_editor("print('Hello')", language="python") ``` --- ### 四、适用场景推荐 | **场景** | **推荐选择** | **理由** | |---------------------------|----------------------|--------------------------------------------| | 在线 IDE/代码沙盒 | ✅ streamlit-monaco | 依赖智能提示和调试功能 | | 配置参数编辑 | ✅ streamlit-monaco | 需要 JSON/YAML 验证 | | 文档中的代码示例展示 | ✅ streamlit-code-editor | 轻量级且加载快 | | 用户输入简单脚本 | ⚖️ 按需选择 | 若需基础编辑选 Code Editor,复杂功能选 Monaco | --- ### 五、社区生态与维护 | **指标** | **streamlit-monaco** | **streamlit-code-editor** | |------------------------|----------------------------|---------------------------| | GitHub Stars (示例) | ~300 | ~150 | | 最近更新时间 | 2023-08-15(活跃) | 2022-11-20(低活跃) | | 官方文档完整性 | 详细(含 API 示例) | 基础说明 | --- ### 六、已知问题与规避方案 #### **Monaco 的局限性**: 1. **移动端兼容性差** *规避方案*:在移动设备上降级使用 `<textarea>` 2. **资源加载阻塞** *优化方案*:预加载 Monaco 资源包 ```python st.markdown('<script src="monaco-loader.js"></script>', unsafe_allow_html=True) ``` #### **Code Editor 的局限性**: 1. **无版本控制** *规避方案*:自行实现历史记录功能 --- ### 七、迁移成本示例 **从 Code Editor 迁移到 Monaco**: ```python # 原 Code Editor 代码 from streamlit_code_editor import code_editor code = code_editor(content, language="python") # 迁移后 Monaco 代码 from streamlit_monaco import monaco_editor code = monaco_editor(value=content, language="python", height=300) ``` --- ### 总结建议 - **选择 `streamlit-monaco` 如果**: 需要完整的代码编辑功能、智能提示、或构建开发者工具类应用 (*典型用例:在线 Python 调试器*) - **选择 `streamlit-code-editor` 如果**: 仅需轻量级代码展示、简单编辑功能 (*典型用例:展示 API 请求示例*)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值