Shiny for Python 为基于 Python 的数据和科学堆栈构建的 Web 应用程序带来了简单的交互性。容器化 Py-Shiny 应用程序是部署到各种托管选项(包括静态托管)的下一步。
Shiny 是一个框架,可以轻松构建交互式 Web 应用程序。Shiny 是 10 年前作为 R 包推出的。在他的 10 周年主题演讲中,Joe Cheng 在 2022 年 RStudio 大会上宣布了Shiny for Python。Python程序员现在可以尝试使用Shiny来创建交互式数据驱动的Web应用程序。Shiny是其他框架的替代品,如Dash或Streamlit。
⚠️
Shiny for Python 目前处于 Alpha 阶段。它可能不稳定,并且 API 可能会更改。我们很高兴听到您的反馈,但请不要将其用于生产应用程序!
与R Shiny应用程序类似,Shiny for Python可以使用RStudio Connect,Shiny Server Open Source和 Shinyapps.io 进行部署。托管数据应用网站专用的替代托管选项要求 Python Shiny 应用在容器内运行。在这篇文章中,我们将回顾如何使用Docker来容器化Shiny for Python应用程序。
我们遵循入门指南(另请参阅安装指南)。您可以安装闪亮的withor。在这里我们将使用。以下命令生成我们将使用的应用文件:pipcondapip
pip install shiny shiny create app shiny run --reload app/app.py # INFO: Will watch for changes in these directories: ['/Users/Username/app'] # INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) # INFO: Started reloader process [57404] using StatReload # INFO: Started server process [57406] # INFO: Waiting for application startup. # INFO: Application startup complete.
转到浏览器以尝试显示滑块和文本输出的应用程序,返回滑块输入值的双倍(当然):http://127.0.0.1:8000
N=n
使用 Ctrl+C 退出应用。
我们将使用带有绘图示例的应用程序。在文本编辑器中打开文件并将以下内容复制到其中:app/app.py
from shiny import App, render, ui import numpy as np import matplotlib.pyplot as plt app_ui = ui.page_fluid( ui.h2("Histogram with Shiny for Python!"), ui.layout_sidebar( ui.panel_sidebar( ui.input_slider("n", "N", 0, 100, 20), ), ui.panel_main( ui.output_plot("plot"), ), ), ) def server(input, output, session): @output @render.plot(alt="A histogram") def plot(): np.random.seed(19680801) x = 100 + 15 * np.random.randn(437) plt.hist(x, input.n(), density=True) app = App(app_ui, server, debug=True)
在与 相同的目录中创建文件,内容如下:app/requirements.txt
app.py
shiny>=0.2.7 numpy>=1.23.3 matplotlib>=3.6.0
现在用于安装剩余的软件包。然后再次加载应用程序并再次访问您的浏览器。pip install --no-cache-dir --upgrade -r app/requirements.txt
shiny run --reload app/app.py
http://127.0.0.1:8000
您将看到新应用程序,其情节看起来与经典的Rhello Shiny应用程序非常相似:
如果您在启动应用程序后查看打印输出,您会注意到 Shiny 在引擎盖下使用Uvicorn。这是使用FastAPI 部署容器化应用的常用方法。