我的环境是用的 Python3.7 + MacOS
在做Dash仪表面板时,在开发阶段我们只能在本地部署,然后只能通过 localhost:8050去访问。
但是我们在做完之后,可能需要部署到实际的网络上,这样其他人也可以访问。
我这里使用的是Heroku+Gunicorn,这个可以免费使用,也可以根据需要升级自己的服务,网址:Heroku官网
打开之后,注册一个账号,完成激活之后,还要下载一个客户端,Heroku CLI,也是跟着官方文档来:Heroku-CLI
另外,还需要安装一些组件:
1、Git,其他系统需要安装Git;
2、virtualenv,虚拟环境:pip install virtualenv
接下来,创建你的功能目录,具体路径自己选择:
$ mkdir my_dash_app
$ cd my_dash_app
使用 git 和 virtualenv 初始化文件夹,一个控制版本,一个是创建一个虚拟环境,这样可以保存所有Python的依赖项
$ git init
$ virtualenv venv
$ source venv/bin/activate
上面的source是激活这个虚拟环境,每次打开项目的时候,需要运行下,否则你安装什么组件的时候,就安装到自己的系统环境去了,虚拟环境并没有安装。
现在开始安装你所需要的组件:
$ pip install dash
$ pip install dash-renderer
$ pip install dash-core-components
$ pip install dash-html-components
$ pip install plotly
还需要一个Web服务器的组件,这里用的是 Gunicorn,同样也是在虚拟环境安装的:
$ pip install gunicorn
现在,我们可以创建需要展示画面的app.py文件了,在工程根目录创建这些文件:
1、app.py 文件,这里面就是我们编写代码的文件了,也就是Dash代码;
2、创建一个.gitignore文件,这个可以看这里:Python忽略文件;
3、创建 requirements.txt 文件,当然也可以通过运行下面的命令创建,这条命令是将当前项目用到的依赖项自动加到这个文件里面来:pip freeze > requirements.txt,如果有新的依赖项安装了,就要运行下这个命令;
4、用于部署的Procfile文件,这个是一个没有后缀的文件,具体可以参考这里:Procfile文件
好了,现在我们在app.py里面写点什么吧:
import os
import dash
import dash_core_components as dcc
import dash_html_components as html
app = dash.Dash(__name__)
server = app.server
app.layout = html.Div([
html.H2('Hello World'),
dcc.Dropdown(
id='dropdown',
options=[{'label': i, 'value': i} for i in ['LA', 'NYC', 'MTL']],
value='LA'
),
html.Div(id='display-value')
])
@app.callback(dash.dependencies.Output('display-value', 'children'),
[dash.dependencies.Input('dropdown', 'value')])
def display_value(value):
return 'You have selected "{}"'.format(value)
if __name__ == '__main__':
app.run_server(debug=True)
在这里,我们需要把 app 和 server 写到 Procfile 文件中去:
web: gunicorn app:server
这个格式也可以参考上面给的Procfile文件网址,web变量表示将服务器指定为gunicorn,app指的是app.py文件,server就是这个文件中的服务器变量。具体为什么,我也是看的资料!以后弄懂再来解释吧。
接下来就是部署了:
1、安装 Heroku CLI,我在上面说了的,如果没有请安装好;
2、运行下面的命令:
$ heroku create your-app-name
$ git add .
$ git commit -m 'Your-commit-message'
$ git push heroku master
第一句是创建一个 heroku app,创建完成后输出这个:
后面两句是将代码提交到git本地库,进行版本管理,如果需要上传到git服务器,那么需要通过命令登陆你的git账号就可以了。
另外,如果你修改了代码,也需要运行第二三句,才能更新到版本管理库中去。
最后一句是通过git将你本地的资源部署到Heroku中去,运行之后会有一大堆东西打印,我结了最后的几行:
这就表示你部署成功了,并且上面也有访问的链接,我的就是 https://test-dash-python.herokuapp.com/
这次你到浏览器上打开就能看到你的网页咯!
PS:
由于我前面写错了代码,第一次部署没有成功,打不开网页,它会提示你使用一个命令查看什么地方出错了:
heroku logs
这个命令可以打印出最近访问你网页的log信息,当然也有错误信息了,然后就跟着错误提示,修改你的代码即可。