python - 在 IIS 上部署plotly dash

标签 python iis plotly-dash

我正在尝试将一个绘图破折号部署到 IIS。
首先,我按照链接中的说明进行操作:
Flask on IIS - James Polera
然后当我使用这个脚本时它就可以工作:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from FastCGI via IIS!"

if __name__ == "__main__":
    app.run()

但是当我使用这个脚本时,它不适用于破折号:

import dash
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash()

app.layout = html.Div(children=[html.H1('Hello Dash!'),
                                html.Div('Dash: Web Dashboard with python'),
                                dcc.Graph(id='example',
                                        figure={'data':[
                                            {'x':[1,2,3],'y':[4,1,3],'type':'bar','name':'SF'},
                                            {'x':[1,2,3],'y':[2,4,5],'type':'bar','name':'NYC'}
                                                        ],
                                                'layout':{'title':'BAR PLOTS'}
                                                })
                                ])

if __name__ == "__main__":
    app.run_server()

我收到此错误:

Error occurred while reading WSGI handler:

Traceback (most recent call last):
  File "C:\inetpub\wwwroot\mysite\wfastcgi.py", line 791, in main
    env, handler = read_wsgi_handler(response.physical_path)
  File "C:\inetpub\wwwroot\mysite\wfastcgi.py", line 633, in read_wsgi_handler
    handler = get_wsgi_handler(os.getenv("WSGI_HANDLER"))
  File "C:\inetpub\wwwroot\mysite\wfastcgi.py", line 600, in get_wsgi_handler
    handler = __import__(module_name, fromlist=[name_list[0][0]])
  File "C:\inetpub\wwwroot\mysite\app.py", line 1, in <module>
    import dash
  File "C:\ProgramData\Anaconda3\lib\site-packages\dash\__init__.py", line 1, in <module>
    from .dash import Dash, no_update  # noqa: F401
  File "C:\ProgramData\Anaconda3\lib\site-packages\dash\dash.py", line 23, in <module>
    import plotly
  File "C:\ProgramData\Anaconda3\lib\site-packages\plotly\__init__.py", line 30, in <module>
    from plotly import (
  File "C:\ProgramData\Anaconda3\lib\site-packages\plotly\graph_objs\__init__.py", line 100161, in <module>
    import ipywidgets
  File "C:\ProgramData\Anaconda3\lib\site-packages\ipywidgets\__init__.py", line 23, in <module>
    from IPython import get_ipython
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\__init__.py", line 55, in <module>
    from .terminal.embed import embed
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\terminal\embed.py", line 15, in <module>
    from IPython.core.interactiveshell import DummyMod, InteractiveShell
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 64, in <module>
    from IPython.utils import io
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\utils\io.py", line 94, in <module>
    stdin = IOStream(sys.stdin, fallback=devnull)
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\utils\io.py", line 38, in __init__
    for meth in filter(clone, dir(stream)):
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\utils\io.py", line 37, in clone
    return not hasattr(self, meth) and not meth.startswith('_')
  File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\utils\io.py", line 81, in closed
    return self.stream.closed
ValueError: underlying buffer has been detached

有人可以帮忙,这两天我一直在努力寻找解决方案。
谢谢

最佳答案

您应该公开 Flask 对象,而不是 Dash 对象。因此代码会是这样的,

import dash
import dash_core_components as dcc
import dash_html_components as html
from flask import Flask

server = Flask(__name__)  # object to be referenced by WSGI handler
app = dash.Dash(server=server)

app.layout = html.Div(children=[html.H1('Hello Dash!'),
                                html.Div('Dash: Web Dashboard with python'),
                                dcc.Graph(id='example',
                                        figure={'data':[
                                            {'x':[1,2,3],'y':[4,1,3],'type':'bar','name':'SF'},
                                            {'x':[1,2,3],'y':[2,4,5],'type':'bar','name':'NYC'}
                                                        ],
                                                'layout':{'title':'BAR PLOTS'}
                                                })
                                ])

if __name__ == "__main__":
    app.run_server()

请注意,在我的代码示例中,Flask 应用程序对象称为 server。因此,根据我的命名约定,WSGI_HANDLER 值应更改为 app.server

关于python - 在 IIS 上部署plotly dash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60322634/

相关文章:

python - 更改 PyCharm 中的 reStructuredText 格式以自动生成注释

iis - 如何在 IIS 中设置静态文件的可缓存性?

azure - 发布完成后 IIS 物理路径发生变化 Azure DevOps

python - 将应用程序部署到 heroku 后,一些破折号图形停止显示

python - 步骤绘制样式 plotly 破折号

python - 如何为 Dash/Plotly 中的下拉菜单命名

python - 如何自动将测试数据加载到 AppEngine 中?

python - python if 中的复合 bool 逻辑

python - Pandas 事件序列的动态滚动计数

powershell - 使用 powershell 启动/停止 IIS 网站时的权限