首页 > 编程语言 >Python没有服务器如何部署运行Shiny应用程序

Python没有服务器如何部署运行Shiny应用程序

时间:2024-05-17 23:31:12浏览次数:26  
标签:Python Shinylive 应用程序 URL 应用 Shiny

原文链接: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应用程序

image.png

请注意,这些URL只在一个方面有所不同——第一个URL包含/editor/部分,而第二个URL包含/app/部分。您可能已经猜到了它们各自指向的页面。

接下来,让我们探索如何使用Shinylive和GitHub部署Shiny for Python应用程序的选项。

如何使用Shinylive和GitHub分享Shiny for Python应用程序

答案很简单——GitHub Gists。接下来,我们将引导您完成创建Gist并在Shinylive中使用的过程。

创建GitHub Gist

如果您有GitHub账户,可以点击右上角的加号按钮来创建一个新的Gist。创建完成后,您的Gist看起来应该是这样的:

image.png

图6 – Shiny for Python应用的GitHub gist

我们唯一做的更改是将直方图的条形颜色从gray改为了red。这不是一个必要的更改,但将证明GitHub gist的连接实际上是在工作的。

通过GitHub Gist分享Shiny for Python应用

查看gist的URL。您只需要ID部分,即用户名之后的部分:

image.png

图7 – GitHub gist URL

您可以复制这个ID部分,并将其粘贴到以下URL的末尾:

   
复制代码
	https://shinylive.io/py/app/#gist=

现在,您可以打开这个URL来验证连接是否工作正常。

image.png

图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或您自己的服务器。

这是您将看到的输出:

image.png 图9 – 安装Shinylive Python包

安装完成后,您可以使用shiny create命令创建一个新的Shiny for Python应用程序。我们将我们的应用程序命名为histogram_app

您应该看到以下输出:

image.png 图10 – 创建Shiny for Python应用

最后,您现在可以使用shinylive导出Shiny for Python应用程序:

这将创建一个新的site目录,其中包含静态应用的内容:

image.png 图11 – 导出Shiny for Python应用以进行静态服务

现在我们已经导出了应用,接下来要做的就是通过Web服务器运行它。

本地应用服务

假设您导出的Shiny for Python应用存储在site文件夹中。

如果一切正常,您将看到一条消息,表明应用已在本地8008端口上运行:

image.png

图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页面。

667913740-1536x1536.jpg

标签:Python,Shinylive,应用程序,URL,应用,Shiny
From: https://www.cnblogs.com/tecdat/p/18198887

相关文章

  • Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用|附代码数据
    原文链接:http://tecdat.cn/?p=24407最近我们被客户要求撰写关于金融时间序列模型的研究报告,包括一些图形和统计输出。这篇文章讨论了自回归综合移动平均模型(ARIMA)和自回归条件异方差模型(GARCH)及其在股票市场预测中的应用 ( 点击文末“阅读原文”获取完整代码数据******......
  • python常见图片格式-读取方法-相互转换
    PIL读取image=Image.open({path})格式h,wTensor读取image=Image.open(image_name).convert('RGB')image=transforms.ToTensor()(image)格式:3,height,width数据类型:float32----tensor颜色通道顺序:RGBOpencv读取cv2.imread({path})格式:heightwi......
  • python基础环境
    刚开始接触并学习一门开发语言,带着不求甚解的想法,其实也挺有好处的:我并不是所有的东西都知道,但是代码跑起来了。但是时间久了,还是带着这种想法,可能就会遇到一些棘手的问题。比如电脑上不知不觉已经安装了多个python版本,python3.8/3.10/3.11,甚至一些软件中也集成有python解释器;那......
  • Python列表解析式(又称列表推导式)
    概况嵌套列表解析式又称嵌套列表推导式,功能非常强大,但是初学者难以摸清其书写规则。以下实例展示了嵌套列表解析的写法。嵌套列表解析表达是的书写规则是层层嵌套。嵌套层的一般形式为:foroutterininner。根据需要解析的嵌套层次深度,此一般形式可以从左到右接续写若干个......
  • Python知识 | Python的数据结构有哪些?
    Python的数据结构有哪些?Python数据结构概览在Python中,数据结构是编程语言的基础,它们决定了数据如何组织和存储。Python的标准库提供了多种内置数据结构,包括:列表(List)列表是一种可变的序列,可以随时添加、删除或修改其元素。列表以方括号[]表示,元素可以是任何类型的数据。元组(T......
  • python 对于实现rsa加密算法
    importbase64importrsaclassGenerateKey(object):d="ascii"defgenerate_keys(self,bits=1024):(pubkey,privkey)=rsa.newkeys(bits)pem_pubkey=rsa.PublicKey.save_pkcs1(pubkey).decode(self.d)b64_pubkey......
  • Python模拟数据生成库Faker
    Python模拟数据生成库FakerPYPI官网https://pypi.org/project/Faker/Github官网https://github.com/joke2k/faker文档https://faker.readthedocs.io/en/master/中文参考:Python-faker的简单使用https://www.cnblogs.com/TSmagic/p/16072399.htmlpython中第三方库Fake......
  • 【吐槽】今天才发现PyCharm不支持对Python脚本进行块注释
    在PyCharm中对Python脚本Ctrl+Shift+/进行块注释不起作用,然后使用OpenArk64查看是否热键占用冲突,没有发现其他占用。然后发现PyCharm中Code菜单项下的选项CommentwithBlockComment是灰色的。又查了下,最后发现jetbrains官方帮助文档中已说明PyCharm不支持对Python脚本进行......
  • Python通过Geoip解析IP地址信息
    最近在研究ELK日志分析系统,在分析haproxy日志时,考虑需要将haproxy内获取到的IP地址进行解析,网站访问情况。于是有了这么一个需求,奈何maxmind数据库有些不准确,于是衍生出了一个想法,要测试maxmind数据库的准确性。于是乎想到了一个简单的方法,利用python脚本来配置geoip数据库来解......
  • python测试postgres远程登录
    #首先安装psycopg2模块importpsycopg2 #配置数据库连接参数conn_params={"dbname":"your_db","user":"your_user","password":"your_password","host":"your_host","port":&......