

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Visualice los resultados del AI/ML modelo con Flask y AWS Elastic Beanstalk
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk"></a>

*Chris Caudill y Durga Sury, Amazon Web Services*

## Resumen
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-summary"></a>

La visualización de los resultados de los servicios de inteligencia artificial y machine learning (IA/ML) suele requerir llamadas complejas a la API, que los desarrolladores e ingenieros deben personalizar. Esto puede ser un inconveniente si sus analistas desean explorar rápidamente un nuevo conjunto de datos.

Para mejorar la accesibilidad de sus servicios y ofrecer una forma de análisis de datos más interactiva puede utilizar una interfaz de usuario (UI) basada en la web que permite a los usuarios cargar sus propios datos y visualizar los resultados del modelo en un panel de control.

Este patrón utiliza [Flask](https://flask.palletsprojects.com/en/stable/) y [Plotly](https://plotly.com/) para integrar Amazon Comprehend en una aplicación web personalizada y visualizar opiniones y entidades a partir de los datos proporcionados por los usuarios. El patrón también proporciona los pasos para implementar una aplicación mediante el uso AWS Elastic Beanstalk. Puede adaptar la aplicación mediante [servicios de AWS IA](https://aws.amazon.com/machine-learning/ai-services/) o con un modelo entrenado personalizado alojado en un punto final (por ejemplo, un [ SageMaker punto final de Amazon](https://docs.aws.amazon.com/sagemaker/latest/dg/deploy-model.html)).

## Requisitos previos y limitaciones
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS. 
+ AWS Command Line Interface (AWS CLI), instalado y configurado en su máquina local. Para obtener más información al respecto, consulte [Conceptos básicos de configuración](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html) en la AWS CLI documentación. También puede usar un entorno de desarrollo AWS Cloud9 integrado (IDE); para obtener más información al respecto, consulte el [tutorial de Python para AWS Cloud9](https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-python.html) obtener una [vista previa de las aplicaciones en ejecución en el AWS Cloud9 IDE](https://docs.aws.amazon.com/cloud9/latest/user-guide/app-preview.html) en la AWS Cloud9 documentación.

  **Aviso**: ya no AWS Cloud9 está disponible para nuevos clientes. Los clientes actuales de AWS Cloud9 pueden seguir utilizando el servicio con normalidad. [Más información](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)
+ Comprensión de la estructura de aplicaciones web de Flask. Para obtener más información acerca de Flask, consulte [Quickstart](https://flask.palletsprojects.com/en/stable/quickstart/) en la documentación de Flask.
+ Python 3.6 o una versión posterior, instalada y configurada. Puede instalar Python siguiendo las instrucciones de [Configuración del entorno de desarrollo de Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-development-environment.html) en la AWS Elastic Beanstalk documentación.
+ Interfaz de la línea de comandos de Elastic Beanstalk (CLI de EB), instalada y configurada. Para obtener más información al respecto, consulte [Instalación de la CLI de EB y Configuración de la CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install.html) [de EB](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-configuration.html) en la documentación de Elastic Beanstalk.

**Limitaciones**
+ La aplicación Flask de este patrón está diseñada para funcionar con archivos .csv que utilizan una sola columna de texto y están limitados a 200 filas. El código de la aplicación se puede adaptar para gestionar otros tipos de archivos y volúmenes de datos.
+ La aplicación no tiene en cuenta la retención de datos y continúa agregando los archivos de usuario cargados hasta que se eliminan manualmente. Puede integrar la aplicación con Amazon Simple Storage Service (Amazon S3) para el almacenamiento persistente de objetos o utilizar una base de datos como Amazon DynamoDB para el almacenamiento de valores clave sin servidor.
+ La aplicación solo tiene en cuenta documentos en inglés. Sin embargo, puede utilizar Amazon Comprehend para detectar el idioma principal de un documento. Para obtener más información acerca de los idiomas admitidos para cada acción, consulte la [Referencia de la API](https://docs.aws.amazon.com/comprehend/latest/dg/API_Reference.html) en la documentación de Amazon Comprehend.

## Arquitectura
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-architecture"></a>

**Arquitectura de aplicaciones Flask**

Flask es una estructura ligera para desarrollar aplicaciones web en Python. Está diseñada para combinar el potente procesamiento de datos de Python con una interfaz de usuario web enriquecida. La aplicación Flask del patrón muestra cómo crear una aplicación web que permita a los usuarios cargar datos, enviar los datos a Amazon Comprehend para su inferencia y, a continuación, visualizar los resultados.   La aplicación tiene la estructura siguiente:
+ `static`— Contiene todos los archivos estáticos que admiten la interfaz de usuario web (por ejemplo JavaScript, CSS e imágenes)
+ `templates` – Contiene todas las páginas HTML de la aplicación
+ `userData` – Almacena los datos cargados por el usuario
+ `application.py` – El archivo de la aplicación Flask
+ `comprehend_helper.py` – Funciones para realizar llamadas de API a Amazon Comprehend
+ `config.py` – Archivo de configuración de la aplicación
+ `requirements.txt` – Las dependencias de Python que requiere la aplicación

El script `application.py` contiene la funcionalidad principal de la aplicación web, que consta de cuatro rutas de Flask. En el diagrama siguiente se muestran estas rutas de Flask.

![Las cuatro rutas de Flask que componen la funcionalidad principal de la aplicación web.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/03d80cf1-ec97-43f7-adb5-2746a9ec70e6/images/9ca6bad1-26e2-4262-98d0-d54c172336bf.png)


 
+ `/` es la raíz de la aplicación y dirige a los usuarios a la página `upload.html` (almacenada en el directorio `templates`).
+ `/saveFile` es una ruta que se invoca después de que un usuario cargue un archivo. Esta ruta recibe una solicitud `POST` a través de un formulario HTML, que contiene el archivo cargado por el usuario. El archivo se guarda en el directorio `userData` y la ruta redirige a los usuarios a la ruta `/dashboard`.
+ `/dashboard` envía a los usuarios a la página `dashboard.html`. En el HTML de esta página, ejecuta el JavaScript código `static/js/core.js` que lee los datos de la `/data` ruta y, a continuación, crea visualizaciones para la página.
+ `/data` es una API de JSON que presenta los datos que se van a visualizar en el panel de control. Esta ruta lee los datos proporcionados por el usuario y utiliza las funciones en `comprehend_helper.py` para enviar los datos del usuario a Amazon Comprehend para el análisis de opiniones y el reconocimiento de entidades nombradas (NER). La respuesta de Amazon Comprehend se formatea y se devuelve como un objeto JSON.

**Arquitectura de implementación**

![Diagrama de arquitectura para usar Flask y Elastic AI/ML Beanstalk para visualizar los resultados del modelo.](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/03d80cf1-ec97-43f7-adb5-2746a9ec70e6/images/d691bfd2-e2ec-4830-8bff-ffa1e3a95c4a.png)


[Consideraciones sobre el diseño](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.concepts.design.html)

 Para obtener más información sobre las consideraciones de diseño de las aplicaciones implementadas con Elastic Beanstalk Nube de AWS en el, consulte la documentación. AWS Elastic Beanstalk 

**Pila de tecnología**
+ Amazon Comprehend
+ Elastic Beanstalk
+ Flask 

**Automatización y escala**

Las implementaciones de Elastic Beanstalk se configuran automáticamente con equilibradores de carga y grupos de escalado automático. Para obtener más opciones de configuración, consulte [Configuración de entornos de Elastic Beanstalk en la documentación de Elastic](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html) Beanstalk.

## Tools (Herramientas)
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-tools"></a>
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) es una herramienta unificada que proporciona una interfaz coherente para interactuar con todas las partes de AWS.
+ [Amazon Comprehend](https://docs.aws.amazon.com/comprehend/latest/dg/comprehend-general.html): utiliza el procesamiento de lenguaje natural (NLP) para extraer información sobre el contenido de los documentos, sin necesitar procesamiento especial.
+ [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html)le ayuda a implementar y administrar aplicaciones rápidamente Nube de AWS sin tener que conocer la infraestructura en la que se ejecutan esas aplicaciones.
+ La [CLI de Elastic Beanstalk (EB CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3.html)) es una AWS Elastic Beanstalk interfaz de línea de comandos que proporciona comandos interactivos para simplificar la creación, la actualización y la supervisión de los entornos desde un repositorio local.
+ El marco de [Flask](https://flask.palletsprojects.com/en/stable/) hace el procesamiento de datos y las llamadas a la API mediante Python y ofrece una visualización web interactiva con Plotly.

**Repositorio de código**

El código de este patrón está disponible en los [resultados del AI/ML modelo de GitHub Visualize mediante Flask](https://github.com/aws-samples/aws-comprehend-elasticbeanstalk-for-flask) y el repositorio. AWS Elastic Beanstalk

## Epics
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-epics"></a>

### Configurar la aplicación Flask
<a name="set-up-the-flask-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Clona el GitHub repositorio. | Extraiga el código de la aplicación de [los resultados del AI/ML modelo de GitHub Visualize mediante Flask y](https://github.com/aws-samples/aws-comprehend-elasticbeanstalk-for-flask) el AWS Elastic Beanstalk repositorio ejecutando el siguiente comando:<br />`git clone git@github.com:aws-samples/aws-comprehend-elasticbeanstalk-for-flask.git`Asegúrese de configurar sus claves SSH con. GitHub | Desarrollador | 
| Instale los módulos de Python. | Una vez clonado el repositorio, se crea un nuevo directorio `aws-comprehend-elasticbeanstalk-for-flask` local. En ese directorio, el archivo `requirements.txt` contiene los módulos y las versiones de Python que ejecutan la aplicación. Utilice los comandos siguientes para instalar los módulos:<br />`cd aws-comprehend-elasticbeanstalk-for-flask`<br />`pip install -r requirements.txt` | Python developer | 
| Pruebe la aplicación localmente. | Ejecute el siguiente comando para iniciar el servidor de Flask:<br />`python application.py`<br />Esto devuelve información sobre el servidor en ejecución. Debería poder acceder a la aplicación si abre un navegador y visita http://localhost:5000Si ejecutas la aplicación en un AWS Cloud9 IDE, debes reemplazar el `application.run()` comando del `application.py` archivo por la siguiente línea:<br />`application.run(host=os.getenv('IP', '0.0.0.0'),port=int(os.getenv('PORT', 8080)))`<br />Debe revertir este cambio antes de la implementación. | Python developer | 

### Implementar la aplicación en Elastic Beanstalk
<a name="deploy-the-application-to-aeb"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Inicie la aplicación Elastic Beanstalk. | Para lanzar el proyecto como una aplicación de Elastic Beanstalk, ejecute el comando siguiente desde el directorio raíz de la aplicación:<br />`eb init -p python-3.6 comprehend_flask --region us-east-1` [See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.html)<br />Ejecute el comando `eb init -i` para obtener más opciones de configuración de implementación. | Arquitecto, desarrollador | 
| Implemente el entorno de Elastic Beanstalk. | Ejecute el comando siguiente desde el directorio raíz de la aplicación: <br />`eb create comprehend-flask-env``comprehend-flask-env` es el nombre del entorno de Elastic Beanstalk y se puede cambiar según las necesidades. El nombre solo puede contener letras, números y guiones. | Arquitecto, desarrollador | 
| Autorice su implementación para usar Amazon Comprehend. | Si bien es posible que su aplicación se haya implementado correctamente, también debe proporcionar a su implementación acceso a Amazon Comprehend. `ComprehendFullAccess`es una política AWS gestionada que proporciona a la aplicación implementada permisos para realizar llamadas de API a Amazon Comprehend.<br />Adjunte la política `ComprehendFullAccess` a `aws-elasticbeanstalk-ec2-role` (esta función se crea automáticamente para las instancias de Amazon Elastic Compute Cloud (Amazon EC2) de la implementación) al ejecutar el comando siguiente:<br />`aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ComprehendFullAccess --role-name aws-elasticbeanstalk-ec2-role``aws-elasticbeanstalk-ec2-role` se crea cuando se implementa la aplicación. Debe completar el proceso de implementación antes de poder adjuntar la política AWS Identity and Access Management (IAM). | Desarrollador, arquitecto de seguridad | 
| Visite su aplicación implementada. | Una vez que la aplicación se haya implementado correctamente, puede visitarla mediante la ejecución del comando `eb open`.<br />También puede ejecutar el comando `eb status` para recibir detalles sobre su implementación. La URL de la implementación aparece en `CNAME`. | Arquitecto, desarrollador | 

### (Opcional) Personalizar la aplicación según su modelo de ML
<a name="optional-customize-the-application-to-your-ml-model"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Autorice que Elastic Beanstalk acceda al nuevo modelo. | Asegúrese de que Elastic Beanstalk tenga los permisos de acceso necesarios para el nuevo modelo de punto de conexión. Por ejemplo, si utilizas un punto de conexión de Amazon SageMaker AI, tu implementación debe tener permiso para invocar el punto de conexión. <br />Para obtener más información al respecto, consulte [InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html)la documentación de Amazon SageMaker AI. | Desarrollador, arquitecto de seguridad | 
| Envíe los datos del usuario a un nuevo modelo. | Para cambiar el modelo de ML subyacente en esta aplicación, debe cambiar los archivos siguientes:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.html) | Científico de datos | 
| Actualice las visualizaciones del panel de control. | Por lo general, la incorporación de un nuevo modelo de ML significa que las visualizaciones deben actualizarse para reflejar los nuevos resultados. Se han realizado estos cambios en los archivos siguientes:[See the AWS documentation website for more details](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk.html) | Desarrollador web | 

### (Opcional) Implementar la aplicación actualizada
<a name="optional-deploy-the-updated-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Actualice el archivo de requisitos de su solicitud. | Antes de enviar los cambios a Elastic Beanstalk, actualice el archivo `requirements.txt` para que refleje los nuevos módulos de Python. Para ello, ejecute el siguiente comando en el directorio raíz de la aplicación:<br />`pip freeze > requirements.txt` | Python developer | 
| Vuelva a implementar el entorno de Elastic Beanstalk. | Para asegurarse de que los cambios en la aplicación se reflejen en la implementación de Elastic Beanstalk, navegue hasta el directorio raíz de la aplicación y ejecute el comando siguiente:<br />`eb deploy`<br />Esto envía la versión más reciente del código de la aplicación a la implementación de Elastic Beanstalk existente. | Administrador de sistemas, arquitecto | 

## Resolución de problemas
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| `Unable to assume role "arn:aws:iam::xxxxxxxxxx:role/aws-elasticbeanstalk-ec2-role". Verify that the role exists and is configured correctly.` | Si este error se produce al ejecutar`eb create`, cree una aplicación de muestra en la consola de Elastic Beanstalk para crear el perfil de instancia predeterminado. Para obtener más información al respecto, consulte [Creación de un entorno de Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.environments.html) en la documentación. AWS Elastic Beanstalk  | 
| `Your WSGIPath refers to a file that does not exist.` | Este error se produce en los registros de implementación porque Elastic Beanstalk espera que se nombre el código de Flask. `application.py` Si eligió un nombre diferente, ejecútelo `eb config` y edítelo WSGIPath como se muestra en el siguiente ejemplo de código:<pre>aws:elasticbeanstalk:container:python:<br />     NumProcesses: '1'<br />     NumThreads: '15'<br />     StaticFiles: /static/=static/<br />     WSGIPath: application.py</pre><br />Asegúrese de reemplazar `application.py` con el nombre de su archivo.<br />También puede aprovechar Gunicorn y un Procfile. Para obtener más información sobre este enfoque, consulte [Configurar el servidor WSGI con un Procfile](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-configuration-procfile.html) en la AWS Elastic Beanstalk documentación. | 
| `Target WSGI script '/opt/python/current/app/application.py' does not contain WSGI application 'application'.` | Elastic Beanstalk espera que se nombre la variable que representa la aplicación Flask. `application` Asegúrese de que el archivo `application.py` utilice `application` como nombre de la variable:<pre>application = Flask(__name__)</pre> | 
| `The EB CLI cannot find your SSH key file for keyname` | Utilice la CLI de EB para especificar qué par de claves usar o para crear un par de claves para las instancias Amazon EC2 de la implementación. Para resolver el error, ejecute `eb init -i` y una de las opciones le solicitará lo siguiente:<pre>Do you want to set up SSH for your instances?</pre><br />Responda `Y` para crear un par de claves o especificar un par de claves existente. | 
| He actualizado mi código y lo he vuelto a implementar, pero mi implementación no refleja mis cambios. | Si utilizas un repositorio de Git con tu implementación, asegúrate de añadir y confirmar los cambios antes de volver a implementarlos. | 
| Estás previsualizando la aplicación Flask desde un AWS Cloud9 IDE y te encuentras con errores. | Para obtener más información al respecto, consulte la documentación sobre cómo obtener [una vista previa de las aplicaciones en ejecución en el AWS Cloud9 IDE](https://docs.aws.amazon.com/cloud9/latest/user-guide/app-preview.html). AWS Cloud9  | 

## Recursos relacionados
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-resources"></a>
+ [Llame a un punto final modelo Amazon SageMaker AI mediante Amazon API Gateway y AWS Lambda](https://aws.amazon.com/blogs/machine-learning/call-an-amazon-sagemaker-model-endpoint-using-amazon-api-gateway-and-aws-lambda/)
+ [Implementación de una aplicación Flask en Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html)
+ [Referencia de los comandos de EB CLI](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-cmd-commands.html)
+ [Configuración del entorno de desarrollo de Python](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/python-development-environment.html)

## Información adicional
<a name="visualize-ai-ml-model-results-using-flask-and-aws-elastic-beanstalk-additional"></a>

*Uso de Amazon Comprehend para el procesamiento de lenguaje natural*

Al elegir Amazon Comprehend, puede detectar entidades personalizadas en documentos de texto individuales mediante la ejecución de análisis en tiempo real o trabajos por lotes asíncronos. Amazon Comprehend también le permite entrenar modelos personalizados de reconocimiento de entidades y clasificación de texto que se pueden utilizar en tiempo real mediante la creación de un punto de conexión.

Este patrón utiliza trabajos por lotes asíncronos para detectar opiniones y entidades en un archivo de entrada que contiene varios documentos. La aplicación de ejemplo que proporciona este patrón está diseñada para que los usuarios carguen un archivo .csv que contenga una sola columna con un documento de texto por fila. El `comprehend_helper.py` archivo del [ AI/ML modelo GitHub Visualize muestra los resultados con Flask y](https://github.com/aws-samples/aws-comprehend-elasticbeanstalk-for-flask) el AWS Elastic Beanstalk repositorio lee el archivo de entrada y envía la entrada a Amazon Comprehend para su procesamiento.

*BatchDetectEntities*

Amazon Comprehend inspecciona el texto de un lote de documentos en busca de entidades nombradas y devuelve la entidad detectada, la ubicación, el [tipo de entidad](https://docs.aws.amazon.com/comprehend/latest/dg/how-entities.html) y una puntuación que indica el nivel de confianza de Amazon Comprehend. Se puede enviar un máximo de 25 documentos en una llamada de API, y cada documento tiene un tamaño inferior a 5000 bytes. Puede filtrar los resultados para mostrar solo determinadas entidades en función del caso de uso. Así, por ejemplo, puede omitir el tipo de entidad `‘quantity’` y establecer una puntuación límite para la entidad detectada (por ejemplo, 0,75). Le recomendamos que explore los resultados para su caso de uso específico antes de elegir un valor umbral. Para obtener más información al respecto, consulte [BatchDetectEntities](https://docs.aws.amazon.com/comprehend/latest/dg/API_BatchDetectEntities.html)la documentación de Amazon Comprehend.

*BatchDetectSentiment*

Amazon Comprehend inspecciona un lote de documentos entrantes y devuelve la opinión predominante para cada documento (`POSITIVE`, `NEUTRAL`, `MIXED` o `NEGATIVE`). Se puede enviar un máximo de 25 documentos en una llamada de API, y cada documento tiene un tamaño inferior a 5000 bytes. Analizar la opinión es sencillo y se puede elegir aquella que tiene la puntuación más alta para que aparezca en los resultados finales. Para obtener más información al respecto, consulte [BatchDetectSentiment](https://docs.aws.amazon.com/comprehend/latest/dg/API_BatchDetectSentiment.html)la documentación de Amazon Comprehend.

*Manejo de la configuración de Flask*

Los servidores Flask utilizan una serie de [variables de configuración](https://flask.palletsprojects.com/en/stable/config/) para controlar el funcionamiento del servidor. Estas variables pueden contener el resultado de la depuración, tokens de sesión u otros ajustes de la aplicación. También puede definir variables personalizadas a las que se puede acceder mientras la aplicación se está ejecutando. Existen varios enfoques para establecer las variables de configuración.

En este patrón, la configuración se define `config.py` y se hereda dentro de `application.py`.
+ `config.py` contiene las variables de configuración que se configuran al iniciar la aplicación. En esta aplicación, se define una variable `DEBUG` para indicar a la aplicación que ejecute el servidor en [modo de depuración](https://flask.palletsprojects.com/en/stable/config/#DEBUG). 
**nota**  
El modo de depuración no debe utilizarse cuando se ejecuta una aplicación en un entorno de producción. `UPLOAD_FOLDER`es una variable personalizada que se define para hacer referencia a ella más adelante en la aplicación e indicarle dónde deben almacenarse los datos de usuario cargados.
+ `application.py` inicia la aplicación Flask y hereda los ajustes de configuración definidos en `config.py`. Esto se lleva a cabo mediante el código siguiente:

```
application = Flask(__name__)
application.config.from_pyfile('config.py')
```