原文链接:https://tecdat.cn/?p=36205
原文出处:拓端数据部落公众号
随着Web技术的快速发展,越来越多的数据科学家和开发人员倾向于使用Web应用程序进行数据分析和可视化。Shiny for Python作为一种流行的Web应用程序框架,为Python开发人员提供了便捷的数据展示和交互工具。然而,在实际应用中,由于硬件资源或成本限制,有时无法直接使用服务器进行部署。本文旨在探讨在无服务器环境下,如何有效地部署和运行Shiny for Python应用程序。
Shiny for Python(或简称为Shiny)是一个用于构建Web应用程序的R包,但它也支持Python环境。通过Shiny,我们的分析师可以快速地帮助客户构建出具有交互性和动态性的数据可视化应用。然而,在部署这些应用时,通常需要服务器环境来托管和运行。但在某些情况下,如个人项目或小型团队项目,可能无法直接获取到服务器资源。因此,研究无服务器环境下的Shiny for Python应用部署方法具有重要意义。
Shiny for Python的Shinylive简介
那么,Shinylive到底是什么?它是一个实验性功能,允许您的Shiny for Python应用程序在Web浏览器中运行。这意味着您不需要为运行Python而单独设置服务器。
通过Shinylive,Python和Shiny在Web浏览器中运行,这代表了应用程序的客户端和服务器。
这得益于两项技术:
- WebAssembly——这是一种编译程序的二进制格式,它可以在Web浏览器中以接近原生的速度运行。
- Pyodide——一个将Python和许多包编译成WebAssembly的端口。
使用Shinylive部署的主要优势在于计算是在客户端完成的。在许多情况下,这对于作为Shiny开发者的您来说是有益的,因为客户端浏览器通常比服务器拥有更强大的计算能力。当您将应用程序扩展到数十或数百个并发用户时,这一点尤为重要。
另一方面,您也可以将其视为一个缺点。例如,有时您需要进行需要大量计算且需要强大服务器的任务。在这种情况下,将计算转移到客户端并不是最佳方案。
下面我们将探讨一些额外的优势和劣势。
使用Shinylive的优势
以下是使用Shinylive部署带来的一些明确且无需多言的优势:
- 无需安装: 您无需在计算机上安装Python或Shiny。
- 超易分享: 通过生成可分享的URL来分享您的应用程序。
- 简单部署: 您可以使用Shinylive将应用程序部署到任何静态网页托管服务(文章末尾将详细介绍)。
- 可扩展性: 应用程序本质上只是静态文件,因此很容易进行扩展。
- 无懈可击的安全性: 应用程序不在服务器上运行,因此几乎消除了所有安全风险。
使用Shinylive的劣势
每项优势都有其劣势,Shinylive也不例外。让我们来看看其中的一些:
- Python包限制: 不是所有的Python包都在Pyodide上可用。
- 下载大小: 通过Python和Pyodide运行Shiny应用程序所需的包大约需要13MB的数据。其他包也有相应的大小(Numpy = 7.5MB, Pandas = 13MB, Matplotlib = 11.5MB)。请注意,这些数据将被缓存,因此只有首次运行时会比较慢。
- 无秘密可言: 应用程序的数据和代码被发送到浏览器,这意味着用户可以轻松地检查它们。
如何使用Shinylive编辑器分享Shiny for Python应用
本节将指导您如何使用和分享通过Shinylive编辑器创建的Shiny for Python应用。
编写Shiny for Python应用程序
首先,我们需要一个应用程序。它基本上绘制了一个从正态分布中抽取的值的直方图。用户可以更改箱数(bin count),图表将自动更新。
您可以将此代码粘贴到Shinylive编辑器中。只需替换已存在的代码并点击运行按钮。
接下来,在右侧您将看到:
图1 – Shiny for Python编辑器(1)
正如之前所承诺的,您可以通过侧边栏中的滑块来更改条形的数量:
图2 – Shiny for Python编辑器(2)
这就是我们的应用程序。虽然它并不复杂,但足以满足本文后续部分的需求。
分享Shiny for Python应用程序
您是否注意到Shinylive编辑器右上角有一个“分享”按钮?如果没有,下面就是它的样子:
图3 – 创建可分享链接
点击它将会打开一个模态窗口,类似于以下这个:
图4 – 编辑器和应用URL
这就是所有神奇发生的地方。您可以分享编辑器URL,这意味着用户将能够访问代码并修改它,或者您可以分享应用URL,这意味着用户将只能看到渲染后的应用程序。
当您分享应用URL时,我们建议您勾选“隐藏头部”复选框,以便不显示给用户蓝色的Shiny for Python标题。
您可以复制这两个URL中的任何一个,并在新的浏览器窗口中打开它们。对于应用URL,您将看到以下界面:
图5 – 已分享的Shiny for Python应用程序
请注意,这些URL只在一个方面有所不同——第一个URL包含/editor/
部分,而第二个URL包含/app/
部分。您可能已经猜到了它们各自指向的页面。
接下来,让我们探索如何使用Shinylive和GitHub部署Shiny for Python应用程序的选项。
如何使用Shinylive和GitHub分享Shiny for Python应用程序
答案很简单——GitHub Gists。接下来,我们将引导您完成创建Gist并在Shinylive中使用的过程。
创建GitHub Gist
如果您有GitHub账户,可以点击右上角的加号按钮来创建一个新的Gist。创建完成后,您的Gist看起来应该是这样的:
图6 – Shiny for Python应用的GitHub gist
我们唯一做的更改是将直方图的条形颜色从gray
改为了red
。这不是一个必要的更改,但将证明GitHub gist的连接实际上是在工作的。
通过GitHub Gist分享Shiny for Python应用
查看gist的URL。您只需要ID部分,即用户名之后的部分:
图7 – GitHub gist URL
您可以复制这个ID部分,并将其粘贴到以下URL的末尾:
复制代码https://shinylive.io/py/app/#gist=
现在,您可以打开这个URL来验证连接是否工作正常。
图8 – 分享的Shiny for Python应用(2)
我们现在有了一个带有红色直方图条的Shiny for Python应用。
在任何地方部署Shiny for Python应用
Shinylive还允许您将Shiny for Python应用部署到静态网页托管服务。此功能目前处于实验阶段,因此细节可能会在未来发生变化。
此部署选项本质上将允许您将您的应用托管在Netlify或GitHub Pages等服务上。还有一个Posit Connect选项,但这些服务需要一整篇文章来详细介绍。
配置Shinylive
第一步是安装shinylive
Python包。
安装完成后,您可以使用Shinylive提供的工具来准备和打包您的应用以供部署。这通常涉及到创建一个包含所有应用文件(包括Python代码、数据文件和任何静态资源)的文件夹,并使用Shinylive的命令行工具来生成一个静态网站。
然后,您可以将这个静态网站部署到任何支持静态文件的Web服务器上,如Netlify、GitHub Pages或您自己的服务器。
这是您将看到的输出:
图9 – 安装Shinylive Python包
安装完成后,您可以使用shiny create
命令创建一个新的Shiny for Python应用程序。我们将我们的应用程序命名为histogram_app
:
您应该看到以下输出:
图10 – 创建Shiny for Python应用
最后,您现在可以使用shinylive
来导出Shiny for Python应用程序:
这将创建一个新的site
目录,其中包含静态应用的内容:
图11 – 导出Shiny for Python应用以进行静态服务
现在我们已经导出了应用,接下来要做的就是通过Web服务器运行它。
本地应用服务
假设您导出的Shiny for Python应用存储在site
文件夹中。
如果一切正常,您将看到一条消息,表明应用已在本地8008端口上运行:
图12 – 运行Shiny for Python应用
现在,您可以打开localhost:8008
并在本地看到您的应用正在运行:
图13 – 本地运行的Shiny for Python应用
您可以通过打开本地Shinylive编辑器来进一步操作。只需访问
localhost:8008/edit
,您就会看到一个熟悉的窗口:
图14 – 本地Shinylive编辑器
Python Shiny的Shinylive总结
Shinylive让分享Python Shiny应用变得更加容易。您可以在线编辑器中完成所有操作,或者选择使用GitHub gist以获得更多控制权。此外,您还可以将应用本地运行或部署在任何静态网站托管服务上,例如GitHub页面。