小编典典

使用Conda环境(而不是virtualenv)将Python(Dash)应用程序部署到Heroku

python

当我运行git push heroku master将应用程序部署到Heroku时,我不断收到错误消息

Heroku Push被拒绝,无法编译Python应用程序。找不到满足要求的版本

问题是requirements.txt我制作的文件

pip freeze > requirements.txt

转储了我的系统范围内的Python库,而不仅仅是我的库virtualenv。这很奇怪,因为我从活动的virtualenv中冻结了这些要求-这种行为不应该发生。

virtualenv Windows上的Windows总是让我放慢速度,所以我准备尝试一个新的环境管理器。

我想使用,conda但正在努力将其部署到Heroku。我遵循Heroku关于conda构建包的说明,只是为了在构建时获得模糊/无益的错误。

如何使用Conda环境将Python应用程序部署到Heroku?


阅读 214

收藏
2020-12-20

共1个答案

小编典典

Heroku不在乎您是使用环境virtualenv还是conda管理环境。使用一个或另一个与部署过程几乎无关。

不要理会Conda Environment
Buildpack的
说明,因为这些说明是用于部署远程conda环境的,而这并不是您要尝试的。您,我的朋友,正在尝试部署远程 your_app 环境。

这是使用破折号应用程序和执行以下操作的方法conda

为您的项目创建一个新文件夹:

$ mkdir dash_app_example
$ cd dash_app_example

用git初始化文件夹

$ git init # initializes an empty git repo

在中创建environment.yml文件dash_app_example

name: dash_app #Environment name
dependencies:
  - python=3.6
  - pip:
    - dash
    - dash-renderer
    - dash-core-components
    - dash-html-components
    - plotly
    - gunicorn # for app deployment

从创建环境environment.yml

$ conda env create

激活conda环境

$ source activate dash_app #Writing source is not required on Windows

确认您所处的环境正确。

当前应该在dash_app中:

$ conda info --envs #Current environment is noted by a *

Initialze与文件夹app.pyrequirements.txt以及Procfile


app.py

import dash
import dash_core_components as dcc
import dash_html_components as html
import os

app = dash.Dash(__name__)
server = app.server

app.css.append_css({"external_url": "https://codepen.io/chriddyp/pen/bWLwgP.css"})

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)

Procfile

web: gunicorn app:server

requirements.txt:描述您的Python依赖关系。您可以通过$ pip freeze > requirements.txt在命令行上运行来自动填充此文件。


您的文件夹结构应如下所示

- dash_app_example
--- app.py
--- environment.yml
--- Procfile
--- requirements.txt

请注意,此目录中没有环境数据。那是因为condavirtualenv将应用程序目录整齐地存储在所有位置不同,所有环境都不一样。无需.gitignore这些文件…它们不在这里!

初始化Heroku,将文件添加到Git,然后部署

$ heroku create my-dash-app # change my-dash-app to a unique name
$ git add . # add all files to git
$ git commit -m 'Initial app boilerplate'
$ git push heroku master # deploy code to heroku
$ heroku ps:scale web=1  # run the app with a 1 heroku "dyno"

资料来源:

  1. 使用Heroku部署应用程序(使用Conda Environments)
  2. 我的Conda Python环境工作流程
  3. 部署Dash应用程序(使用virtualenv
2020-12-20