编辑已部署的 Streamlit 应用程序¶
在 Snowsight 中部署 Streamlit 应用程序后,您可以使用 Snowsight 或 SQL 命令编辑应用程序代码和依赖项。更改生效的方式取决于运行时环境以及应用程序的创建方式。
备注
使用 ROOT_LOCATION 参数创建的应用程序(旧版应用)编辑功能有限,建议转换为使用 FROM 参数以获得完整功能。有关更多信息,请参阅 了解不同类型的 Streamlit 对象。
本页仅涵盖使用 FROM 参数创建的应用程序。
当多人同时编辑同一应用程序时,容器和仓库两种运行时环境均可能发生竞争条件。有关详细信息和最佳实践,请参阅 协作编辑注意事项。
编辑方法¶
您可以通过 Snowsight 的内置浏览器编辑器编辑应用程序,或使用 SQL 命令上传文件进行编辑。
登录 Snowsight。
在导航菜单中选择 Projects » Streamlit,然后选择您的 Streamlit 应用程序。
选择右上角的 Edit。
在文件资源管理器中,选择或创建要编辑的新文件:
若要编辑现有文件,请在文件资源管理器中选中该文件。
要创建新文件,请选择 +`(添加) |raa| :ui:`Create new file,输入文件名,然后选择 Create。文件名中可包含子目录,例如
subdir/new_file.py。要从本地计算机上传文件,请选择 +`(添加)|raa| :ui:`Upload file,选择要上传的文件,根据需要修改文件名和路径,然后选择 Upload。
在编辑器窗格中进行修改。
修改内容将在数秒后自动保存至应用的源位置。
可选:选择 Run。
如果您不想等待数秒让修改自动保存,可选择 Run 以立即复制更改内容。
如果您的应用程序使用仓库运行时,查看者需选择 Run 才能将更改复制到其应用程序实例。如果您的应用程序使用容器运行时,更改将直接保存至实时应用程序的源位置,所有查看者下次与应用程序交互时即可看到更新内容。
如果您已将编辑后的应用文件存放在暂存区中,可以使用以下命令执行 CREATE OR REPLACE 操作来更新应用程序:
CREATE OR REPLACE STREAMLIT my_app
FROM '@my_stage/app_folder'
MAIN_FILE = 'streamlit_app.py'
QUERY_WAREHOUSE = my_warehouse
RUNTIME_NAME = 'SYSTEM$ST_CONTAINER_RUNTIME_PY3_11'
COMPUTE_POOL = my_compute_pool
EXTERNAL_ACCESS_INTEGRATIONS = (pypi_access_integration);
或者,如果您希望就地更新应用程序文件,或仅更新部分应用程序文件,可使用以下命令:
获取应用程序源位置的 URI:
DESCRIBE STREAMLIT my_app;
live_version_location_uri值即为应用程序的源位置。复制该值以用于后续步骤。使用 PUT 或 COPY FILES 将一个或多个更新后的应用程序文件上传至源位置。
COPY FILES INTO '<live_version_location_uri>' FROM @my_stage FILES = ('streamlit_app.py');;
备注
需要 Snowflake CLI 3.14.0 或更高版本。3.14+ 版本默认使用现代 CREATE STREAMLIT 语法。
如果您在本地计算机上已拥有一整套编辑完成的应用程序文件(包括用于 Snow CLI 的 snowflake.yml 文件),可通过以下命令重新部署应用程序:
snow streamlit deploy --replace
运行时行为差异¶
您的编辑内容生效方式取决于应用程序的运行时类型。
容器运行时¶
编辑容器运行时应用程序时:
对应用程序源代码的更改会直接推送到实时应用程序。
当前查看者在下次与应用程序交互并触发重新运行时会看到更新。(Streamlit 配置选项 (https://docs.streamlit.io/develop/api-reference/configuration/config.toml#server)
server.runOnSave默认处于禁用状态。)查看者可使用 Run 按钮,但无需通过该按钮即可将更改传播到当前查看或编辑会话。
所有用户都会看到相同的应用程序实例,且更改会立即生效。
尽管实时应用程序在查看者之间共享,但 Snowsight 编辑器中的源代码视图并非共享状态。因此,当多人同时编辑应用程序时,容器运行时的应用程序仍可能面临竞争条件。有关详细信息和最佳实践,请参阅 协作编辑注意事项。
仓库运行时¶
编辑仓库运行时应用程序时:
每个查看者的实例启动时会复制应用程序源代码。
当前查看者必须选择 Run 才能复制其会话期间对源代码所做的更新。
即使是进行编辑的人员也必须点击 Run 才能在预览窗格中看到更改。
每位查看者将获得各自独立的应用程序实例。
协作编辑注意事项¶
当多人同时编辑同一应用程序时,请注意潜在的冲突。如果多人同时编辑应用程序,无论是容器运行时还是仓库运行时的应用程序,均可能面临以下竞争条件:
竞态条件¶
Snowsight 编辑器的工作原理如下:
当您打开编辑器窗格或使用文件导航器打开文件时,当前源代码会复制到编辑器窗格中。
如果您在编辑器窗格中查看文件,该文件不会在其他人进行更改时自动更新。
如果您在编辑器窗格中进行修改,自动保存功能将覆盖自您打开编辑器后由其他人所做的任何更改。
系统不会自动合并存在冲突的编辑内容。
例如,以下操作顺序可能导致更改丢失:
开发者 A 于 2:00 PM 打开编辑器。
开发者 B 于 2:15 PM 进行修改并保存。
开发者 A 于 2:30 PM 保存修改。
开发者 B 的更改将丢失(被开发者 A 的更改覆盖)。
团队编辑的最佳实践¶
为避免团队协作时发生冲突,建议采取以下措施:
在进行编辑前与团队成员充分沟通。
将源文件存储在 Git 存储库中,并从此处部署代码。
使用独立的开发应用程序来测试更改。
在开始编辑前,重新加载 Snowsight 编辑器以立即获取最新版本。