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应用程序非常相似:
The Dockerfile
如果您在启动应用程序后查看打印输出,您会注意到 Shiny 在引擎盖下使用Uvicorn。这是使用FastAPI 部署容器化应用的常用方法。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/python/292944.html