使用 Streamlit 为应用程序添加前端体验

本主题介绍如何在 Snowflake Native App 中包含 ` Streamlit <https://streamlit.io/ (https://streamlit.io/)>`_。

关于 Streamlit 和 Snowflake Native App Framework

` Streamlit <https://streamlit.io/ (https://streamlit.io/)>`_ 是一个开源 Python 库,可以轻松创建和共享用于机器学习和数据科学的自定义 Web 应用程序。通过使用 Streamlit,可以快速构建和部署强大的数据应用程序。

有关此开源库的信息,请参阅 ` Streamlit 库文档 <https://docs.streamlit.io/ (https://docs.streamlit.io/)>`_。

在 Snowflake Native App Framework 内,您可以使用 Streamlit 执行以下操作:

  • 创建一个前端 Web 应用程序,让使用者能够可视化您的 Snowflake Native App 提供的数据。

  • 创建一个用户界面,让使用者可以向 Snowflake Native App 所使用的其账户内的对象授予权限并创建引用。

    有关更多信息,请参阅 请求访问使用者账户中的对象

备注

有关不受支持的 Streamlit 功能的信息,请参阅 不支持的 Streamlit 功能

受支持的 Streamlit 库版本

Snowflake Native App Framework 支持 Streamlit 库的 1.22.0 和 1.26.0 版本。在 Streamlit 库的更新版本发布时,将包含对这些版本的支持。

参阅 为应用程序设置 Streamlit 版本,了解如何为 Streamlit 应用程序设置版本的信息。

支持的外部包

默认情况下,Snowflake Native App 中包含的 Streamlit 应用程序包括在使用者环境中预装的 pythonstreamlitsnowflake-snowpark-python 包。使用者环境还可以访问这些包所需的依赖项。

不支持的 Streamlit 功能

在 Snowflake Native App 中使用 Streamlit 时,当前不支持以下 Streamlit 功能:

  • ` st.bokeh_chart <https://docs.streamlit.io/library/api-reference/charts/st.bokeh_chart (https://docs.streamlit.io/library/api-reference/charts/st.bokeh_chart)>`_

  • ` st.cache_data <https://docs.streamlit.io/library/api-reference/performance/st.cache_data (https://docs.streamlit.io/library/api-reference/performance/st.cache_data)>`_

  • ` st.cache_resource <https://docs.streamlit.io/library/api-reference/performance/st.cache_resource (https://docs.streamlit.io/library/api-reference/performance/st.cache_resource)>`_

  • ` st.camera_input <https://docs.streamlit.io/library/api-reference/widgets/st.camera_input (https://docs.streamlit.io/library/api-reference/widgets/st.camera_input)>`_

  • ` st.download_button <https://docs.streamlit.io/library/api-reference/widgets/st.download_button (https://docs.streamlit.io/library/api-reference/widgets/st.download_button)>`_

  • ` st.file_uploader <https://docs.streamlit.io/library/api-reference/widgets/st.file_uploader (https://docs.streamlit.io/library/api-reference/widgets/st.file_uploader)>`_

  • ` st.image <https://docs.streamlit.io/library/api-reference/media/st.image (https://docs.streamlit.io/library/api-reference/media/st.image)>`_

  • ` st.pyplot <https://docs.streamlit.io/library/api-reference/charts/st.pyplot (https://docs.streamlit.io/library/api-reference/charts/st.pyplot)>`_

  • ` st.scatter_chart <https://docs.streamlit.io/library/api-reference/charts/st.scatter_chart (https://docs.streamlit.io/library/api-reference/charts/st.scatter_chart)>`_

  • ` st.set_page_config <https://docs.streamlit.io/library/api-reference/utilities/st.set_page_config (https://docs.streamlit.io/library/api-reference/utilities/st.set_page_config)>`_

    不支持 ` st.set_page_config <https://docs.streamlit.io/library/api-reference/utilities/st.set_page_config (https://docs.streamlit.io/library/api-reference/utilities/st.set_page_config)>`_ 命令的 page_titlepage_icon 属性。

  • ` st.video <https://docs.streamlit.io/library/api-reference/media/st.video (https://docs.streamlit.io/library/api-reference/media/st.video)>`_

  • ` 自定义组件 <https://docs.streamlit.io/library/components (https://docs.streamlit.io/library/components)>`_,包括:

    • ` component.html() <https://docs.streamlit.io/library/components/components-api#stcomponentsv1html (https://docs.streamlit.io/library/components/components-api#stcomponentsv1html)>`_

    • ` component.iframe() <https://docs.streamlit.io/library/components/components-api#stcomponentsv1iframe (https://docs.streamlit.io/library/components/components-api#stcomponentsv1iframe)>`_

  • ` 自定义主题 <https://docs.streamlit.io/library/advanced-features/theming (https://docs.streamlit.io/library/advanced-features/theming)>`_

  • ` 配置文件 <https://docs.streamlit.io/library/advanced-features/configuration (https://docs.streamlit.io/library/advanced-features/configuration)>`_

  • 以下实验性功能:

  • 在 ` st.markdown <https://docs.streamlit.io/library/api-reference/text/st.markdown (https://docs.streamlit.io/library/api-reference/text/st.markdown)>`_ 中,不支持使用 unsafe_allow_html=True 的不安全 HTML。

  • 通过互联网访问网络

  • 锚定链接

创建和测试 Streamlit 应用程序的工作流

以下工作流描述了在应用程序包中包含 Streamlit 应用程序的典型工作流。根据应用程序的要求,这可能是一个迭代的过程。

  1. 开发原生应用程序。

    这包括添加您希望使用者使用 Streamlit 访问的数据内容。有关更多信息,请参阅 Snowflake Native App Framework 工作流程

  2. 查看以下部分,了解 Streamlit 库的受支持版本和不受支持的功能:

  3. 开发 Streamlit 应用程序。

    请参阅 ` Streamlit 库文档 <https://docs.streamlit.io/ (https://docs.streamlit.io/)>`_,了解使用 Streamlit 开源库的信息。

  4. 为 Streamlit 应用程序创建本地目录结构。

    请参阅 Streamlit 应用程序的示例目录结构,获得有关如何在应用程序结构中组织 Streamlit 文件的建议。

  5. manifest.yml 文件中添加一个用于 Streamlit 应用程序的条目。

    要包含 Streamlit 应用程序,您必须在 manifest.yml 文件中包含默认 Streamlit 文件的名称。有关更多信息,请参阅 将 Streamlit 应用程序添加到清单文件

  6. 向安装脚本添加一条 CREATE STREAMLIT 语句。

    运行 CREATE APPLICATION 命令,安装脚本将运行 CREATE STREAMLIT 语句,以创建 Streamlit 对象。此对象包含 Streamlit 应用程序所需的架构和 Python 文件。

  7. 配置 environment.yml 文件,以在您的 Streamlit 应用程序中包含其他库。

    有关更多信息,请参阅 向 Streamlit 应用程序添加额外的包

  8. 将 Streamlit 文件、environment.yml 文件、安装脚本和 manifest.yml 文件上传到命名暂存区。要在应用程序包中包含 Streamlit 代码文件,必须将文件上传到命名暂存区。

  9. 测试应用程序包。

    创建应用程序包和 Streamlit 应用程序所需的文件后,创建一个应用程序对象,以测试安装脚本和 manifest.yml 文件。

    有关更多信息,请参阅 测试包含 Streamlit 应用程序的应用程序包

  10. 在 Snowsight 中查看 Streamlit 应用程序。

    要测试 Streamlit 应用程序,请在 Snowsight 中查看应用程序。请参阅 在 Snowsight 中测试 Streamlit 应用程序

Streamlit 应用程序的示例目录结构

与其他 Python 模块一样,要将 Streamlit 应用程序添加到应用程序包,必须将 Streamlit 代码文件上传到命名暂存区。有关如何将文件上载到暂存区的信息,请参阅 PUT

要考虑一个 Snowflake Native App 的多个版本,请考虑使用如下目录结构来维护 Streamlit 应用程序和相关应用程序文件:

@test.schema1.stage1:
└── /
    ├── manifest.yml
    ├── readme.md
    ├── scripts/setup_script.sql
    └── code_artifacts/
        └── streamlit/
            └── environment.yml
            └── streamlit_app.py
Copy

请注意,您创建的目录结构取决于您的应用程序和开发环境的要求。

备注

environment.yml 文件必须与 Streamlit 应用程序的主文件处于同一级别。

有关相对路径的更多信息,请参阅 引用外部代码文件

将 Streamlit 应用程序添加到清单文件

要在应用程序包中包含 Streamlit 文件,请在 manifest.yml 文件中添加以下条目。

artifacts:
  ...
  default_streamlit: app_schema.streamlit_app_na
  ...
Copy

default_streamlit: app_schema.streamlit_app_na 条目指定包含 Streamlit 应用程序的架构的位置。

在装脚本中创建 Streamlit 对象

以下示例演示如何在应用程序的安装脚本中使用 CREATE STREAMLIT

CREATE OR REPLACE STREAMLIT app_schema.my_test_app_na
     FROM '/code_artifacts/streamlit'
     MAIN_FILE = '/streamlit_app.py';

GRANT USAGE ON SCHEMA APP_SCHEMA TO APPLICATION ROLE app_public;
GRANT USAGE ON STREAMLIT APP_SCHEMA.MY_TEST_APP_NA TO APPLICATION ROLE app_public;
Copy

此示例在名为 app_schema 的架构内创建 Streamlit 对象。CREATE STREAMLIT 命令使用 MAIN_FILE 子句指定的 Streamlit 应用程序。目录位置由 FROM 子句的值指定。

请参阅 Streamlit 应用程序的示例目录结构,了解在应用程序包中为 Streamlit 应用程序创建目录结构的信息。

此示例还向应用程序角色授予对架构和 Streamlit 对象的必要权限。

向 Streamlit 应用程序添加额外的包

使用 environment.yml 文件,向 Streamlit 应用程序添加额外的 Python 包。例如,要向 Streamlit 添加 scikit-learn 库,将以下内容添加到 environment.yml 文件:

name: sf_env
channels:
- snowflake
dependencies:
- scikit-learn
Copy

namechannels 属性均为必需。

此外,channels 属性下需要有 - snowflake 键。这表明 ` Snowflake Anaconda 通道 <https://repo.anaconda.com/pkgs/snowflake/ (https://repo.anaconda.com/pkgs/snowflake/)>`_。

备注

只能安装 ` Snowflake Anaconda 通道 <https://repo.anaconda.com/pkgs/snowflake/ (https://repo.anaconda.com/pkgs/snowflake/)>`_ 中列出的包。Snowflake 不支持在 Streamlit 中使用外部 Anaconda 通道。

为应用程序设置 Streamlit 版本

Snowflake Native App Framework 支持 Streamlit 库的多个版本。要在 Snowflake Native App 中设置 Streamlit 版,请将 streamlit 添加到 environment.yml 文件的 dependencies 部分,如以下示例所示:

name: sf_env
channels:
- snowflake
dependencies:
- streamlit=1.22.0|1.26.0
Copy

Snowflake 建议显式为您的应用程序设置 Streamlit 版本。但如果您目前并未显式设置 Streamlit 库的版本,则系统默认设置 Streamlit 版本 1.22.0。

测试包含 Streamlit 应用程序的应用程序包

测试包含 Streamlit 应用程序的应用程序包,请运行 CREATE APPLICATION,以使用命名暂存区中的文件创建应用程序对象,如以下示例所示:

CREATE APPLICATION hello_snowflake_app
  FROM APPLICATION PACKAGE hello_snowflake_package
  USING '@hello_snowflake_code.core.hello_snowflake_stage';
Copy

根据您需要测试的内容,您可以使用其他形式的 CREATE APPLICATION 创建应用程序对象。例如,您可能希望将 Streamlit 应用程序作为版本或升级的一部分进行测试。请参阅 创建应用程序对象

在 Snowsight 中测试 Streamlit 应用程序

要测试 Streamlit 应用程序,请执行以下操作,在 Snowsight 中查看应用程序:

  1. 登录 Snowsight

  2. 在导航菜单中,选择 Data Products » Apps

  3. 选择要查看的 Streamlit 应用程序。

    主 Streamlit 应用程序将在 Snowsight 中打开。

  4. 可选:如果正在查看多页面 Streamlit 应用程序,请选择一个选项卡以查看其他页面。

在 Snowflake Native App Framework 中对 Streamlit 应用程序进行故障排除

如果应用程序显示未知错误,请确保尝试以下部分中描述的解决方案。

确认服务条款

要在 Snowflake 中使用 Streamlit 和 Anaconda 提供的包,您必须确认 ` 外部产品条款 <https://www.snowflake.cn/legal/external-offering-terms/>`_。要了解更多信息,请参阅 使用 Anaconda 的第三方包

防火墙允许列表

每个 Streamlit 应用程序都使用一个唯一子域。如果您使用严格的防火墙,请将 *.snowflake.app 添加到防火墙允许列表。将此条目添加到允许列表,允许应用程序与 Snowflake 服务器通信,而不受任何限制。

语言: 中文