Implemente una aplicación Python (Dash) en Heroku usando entornos Conda (en lugar de virtualenv)

Cuando ejecuto git push heroku master para implementar mi aplicación en Heroku, sigo recibiendo errores

Heroku Push rechazó, no pudo comstackr la aplicación Python. No se pudo encontrar una versión que satisfaga el requisito.

El problema fue que el archivo Requirements.txt que hice con

 pip freeze > requirements.txt 

hice un volcado de las bibliotecas de Python de todo mi sistema en lugar de las bibliotecas de mi virtualenv ( como se describe aquí ). Esto fue muy extraño porque congelé esos requisitos de mi virtualenv activo, este comportamiento no debería haber sido posible.

virtualenv en Windows siempre me ha ralentizado, así que estoy listo para probar un nuevo administrador de entornos.

Quiero usar conda pero estoy luchando para desplegarlo con Heroku. Seguí las instrucciones de Heroku para los paquetes de comstackción de Conda solo para obtener errores vagos / inútiles en el momento de la comstackción.

¿Cómo puedo implementar una aplicación Python en Heroku utilizando los entornos Conda?

A Heroku no le importa si estás usando virtualenv o conda para administrar entornos. El uso de uno u otro es mayormente irrelevante para el proceso de implementación.

No se moleste con las instrucciones de Conda Environment Buildpack , ya que son para implementar un entorno de conda remoto que no es lo que está tratando de hacer. Tú, amigo mío, estás intentando implementar un entorno remoto de your_app .

Aquí le mostramos cómo hacerlo con una aplicación de guión y conda :

Crea una nueva carpeta para tu proyecto:

 $ mkdir dash_app_example $ cd dash_app_example 

Inicializa la carpeta con git.

 $ git init # initializes an empty git repo 

Cree un archivo environment.yml en 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 

Crea el entorno desde environment.yml :

 $ conda env create 

Activar el entorno conda.

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

Confirme que el entorno en el que se encuentra es correcto.

Actualmente debería estar en dash_app:

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

Inicialice la carpeta con app.py , app.py y un 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 : describe sus dependencias de Python. Puedes rellenar este archivo automáticamente con:

 $ pip freeze > requirements.txt 

La estructura de su carpeta debe verse como

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

Observe que no hay datos de entorno en este directorio. Esto se debe a que, a diferencia de virtualenv almacena todos sus entornos en un lugar perfectamente alejado de su directorio de aplicaciones. No hay necesidad de .gitignore esos archivos … ¡no están aquí!

Inicialice Heroku, agregue archivos a Git y despliegue

 $ 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" 

Fuentes:

  1. Despliegue de una aplicación con Heroku (usando Conda Environments)
  2. Flujo de trabajo del entorno My Python con Conda
  3. Implementación de aplicaciones de Dash (usando virtualenv )