{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"../imagenes/logo-final-ap.png\"  width=\"80\" height=\"80\" align=\"left\"/> \n",
    "</figure>\n",
    "\n",
    "# <span style=\"color:blue\"><left>Aprendizaje Profundo</left></span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <span style=\"color:red\"><center>Diplomado en Inteligencia Artificial y Aprendizaje Profundo</center></span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <span style=\"color:green\"><center>Ambientes Virtuales<center></span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    },
    "tags": []
   },
   "source": [
    "## <span style=\"color:#4361EE\">Profesores</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Alvaro  Montenegro, PhD, ammontenegrod@unal.edu.co\n",
    "1. Camilo José Torres Jiménez, Msc, cjtorresj@unal.edu.co\n",
    "1. Daniel  Montenegro, Msc, dextronomo@gmail.com "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    },
    "tags": []
   },
   "source": [
    "## <span style=\"color:#4361EE\">Asesora Medios y Marketing digital</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4. Maria del Pilar Montenegro, pmontenegro88@gmail.com\n",
    "5. Jessica López Mejía, jelopezme@unal.edu.co"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    },
    "tags": []
   },
   "source": [
    "## <span style=\"color:#4361EE\">Jefe Jurídica</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "6. Paula Andrea Guzmán, guzmancruz.paula@gmail.com"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    },
    "tags": []
   },
   "source": [
    "## <span style=\"color:#4361EE\">Coordinador Jurídico</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "7. David Fuentes, fuentesd065@gmail.com"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    },
    "tags": []
   },
   "source": [
    "## <span style=\"color:#4361EE\">Desarrolladores Principales</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "8. Dairo Moreno, damoralesj@unal.edu.co\n",
    "9. Joan Castro, jocastroc@unal.edu.co\n",
    "10. Bryan Riveros, briveros@unal.edu.co\n",
    "11. Rosmer Vargas, rovargasc@unal.edu.co\n",
    "12. Venus Puertas, vpuertasg@unal.edu.co"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    },
    "tags": []
   },
   "source": [
    "## <span style=\"color:#4361EE\">Expertos en Bases de Datos</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "13. Giovvani Barrera, udgiovanni@gmail.com\n",
    "14. Camilo Chitivo, cchitivo@unal.edu.co"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <span style=\"color:#4361EE\">Creando Ambientes de Trabajo con Anaconda</span>\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### <span style=\"color:#4CC9F0\">Motivación</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "YpCjMi-eESDM"
   },
   "source": [
    "Ha llegado el momento de utilizar los lenguajes de programación **inteligentemente**.\n",
    "\n",
    "Imaginemos que por alguna razón, algún genio informático ha diseñado un código para **predecir la bolsa de valores**.\n",
    "\n",
    "Como el genio informático no tiene mucha idea de lo que ha hecho es algo grande, ha decidido publicarlo en alguna parte (Drive, GitHub, etc).\n",
    "\n",
    "Nosotros, **curiosos como siempre**, hemos decidido darle un vistazo a su código y por qué no, ejecutarlo.\n",
    "\n",
    "Sin embargo, existe un gran problema:\n",
    "\n",
    "**¡La sintáxis del código está escrita en versiones anteriores de Python (3.5 por ejemplo) y nosotros poseemos la version 3.7.6 en nuestro ambiente de Jupyter!**\n",
    "\n",
    "El secreto detrás de la **creación de ambientes de trabajo** es poder ejecutar ese trabajo que otras personas han hecho en el pasado y poder obtener sus resultados\n",
    "\n",
    "**¡Good News!**\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "yAQ45Kp0ESDV"
   },
   "source": [
    "## <span style=\"color:#4361EE\">Anaconda Prompt</span>\n",
    "\n",
    "Para comenzar a programar en serio, es necesario usar la consola que viene con Anaconda.\n",
    "\n",
    "Es **fundamental** para instalar paquetes y crear ambientes, iniciar como Administrador\n",
    "\n",
    "\n",
    "<img src=\"https://raw.githubusercontent.com/ucmadcursoPythonyR/2020/master/images/Prompt.png\" />\n",
    "<img src=\"https://raw.githubusercontent.com/ucmadcursoPythonyR/2020/master/images/Prompt2.png\" />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "LxIrPJdtESDb"
   },
   "source": [
    "Notemos el **(base)** antes de la ruta **(path)** en el computador.\n",
    "\n",
    "Este **(base)** representa nuestro ambiente base instalado en el PC por defecto que hace Anaconda.\n",
    "\n",
    "Al ejecutar el comando \n",
    "\n",
    "```conda list```\n",
    "\n",
    "Podremos observar todos los paquetes instalados por defecto (150+), útiles para hacer cálculos científicos y muchos otros fines.\n",
    "\n",
    "**conda** es el manejador de paquetes de Anaconda (Siendo Anaconda el Software)\n",
    "\n",
    "Usaremos con mucha frecuencia el comando **```conda```** de aquí en adelante."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "_s8ODm60ESDi"
   },
   "source": [
    "### <span style=\"color:#4CC9F0\">Mantener Actualizados los Paquetes de Anaconda</span>\n",
    "\n",
    "Ejecutamos los siguientes comandos:\n",
    "\n",
    "```conda update conda```\n",
    "\n",
    "```conda update anaconda```\n",
    "\n",
    "para ver qué paquetes con mejoras están disponibles a tiempo real.\n",
    "\n",
    "No es necesario hacer este paso, pero es una buena práctica de programación.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "xfVeIPOVESDm"
   },
   "source": [
    "## <span style=\"color:#4361EE\">Creando Nuevos Ambientes de Trabajo</span>\n",
    "\n",
    "Crear un nuevo ambiente de trabajo es tan fácil como ejecutar\n",
    "\n",
    "```conda create -n myenv```\n",
    "\n",
    "donde **myenv** es el nombre que uno quiere darle a dicho ambiente.\n",
    "\n",
    "**-n** es un shortcut para decir **name** (también se puede usar **--name**)\n",
    "\n",
    "**Ejemplo:**\n",
    "\n",
    "```conda create -n clase```\n",
    "\n",
    "Pedirá confirmación del usuario para crear el ambiente.\n",
    "\n",
    "Para visualizar los ambientes disponibles, se debe ejecutar\n",
    "\n",
    "```conda env list``` \n",
    "\n",
    "(env = environment = ambiente)\n",
    "\n",
    "<img src=\"https://raw.githubusercontent.com/ucmadcursoPythonyR/2020/master/images/env_list.png\" />\n",
    "\n",
    "En este caso, podemos ver que están disponibles tres ambientes de trabajo:\n",
    "\n",
    "* base ( * significa que es el ambiente que por defecto se inicializa al iniciar Anaconda)\n",
    "* clase\n",
    "* tf2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "KdoqEbi5ESDu"
   },
   "source": [
    "## <span style=\"color:#4361EE\">Activando Ambientes</span>\n",
    "\n",
    "Para **activar** un ambiente de trabajo, se ejecuta\n",
    "\n",
    "```conda activate myenv```\n",
    "\n",
    "Para **desactivar** el ambiente se ejecuta\n",
    "\n",
    "```conda deactivate```\n",
    "\n",
    "**Ejemplo:**\n",
    "\n",
    "<img src=\"https://raw.githubusercontent.com/ucmadcursoPythonyR/2020/master/images/conda_activate.png\" />\n",
    "\n",
    "Podemos ver como se cambia de **(base)** a **(clase)** y luego se desactiva y se vuelve a **(base)**\n",
    "\n",
    "Veamos que hay dentro del ambiente **(clase)**:\n",
    "\n",
    "<img src=\"https://raw.githubusercontent.com/ucmadcursoPythonyR/2020/master/images/conda_list.png\" />\n",
    "\n",
    "Como no hemos pedido que instale ningún paquete, éste ambiente está **vacío**.\n",
    "\n",
    "Vamos entonces a agregar unas cuantas cosas."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "qiNU7evtESDz"
   },
   "source": [
    "## <span style=\"color:#4361EE\">Instalando Paquetes en Ambientes Diferentes del (base)</span>\n",
    "\n",
    "Es importante hacer esto, sobre todo cuando se hacen proyectos profesionales.\n",
    "\n",
    "Queremos administrar versiones compatibles de paquetes, ya sean anteriores o nuevas, para poder ejecutar cualquier tipo de código existente en la Web.\n",
    "\n",
    "Para **instalar un paquete** en un ambiente de trabajo, debemos activarlo y usar el comando ```conda install pkgname``` (pkgname = nombre del paquete):\n",
    "\n",
    "**Ejemplo**\n",
    "\n",
    "```conda activate clase```\n",
    "\n",
    "```conda install python=3.5 -y```\n",
    "\n",
    "**-y** es un shortcut para no pedir confirmación del usuario (algo parecido a \"*yes, you will!*\" )\n",
    "\n",
    "<img src=\"https://raw.githubusercontent.com/ucmadcursoPythonyR/2020/master/images/conda_install.png\" />\n",
    "\n",
    "Ahora podemos ver los **nuevos paquetes** instalados en el nuevo ambiente de trabajo:\n",
    "\n",
    "<img src=\"https://raw.githubusercontent.com/ucmadcursoPythonyR/2020/master/images/conda_list2.png\" />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "R_Feki0-ESD4"
   },
   "source": [
    "## <span style=\"color:#4361EE\">¿Cómo Eliminar Ambientes y Por Qué es Importante Todo Esto?</span>\n",
    "\n",
    "La idea detrás de los ambientes de trabajo es poder tener una alternativa a la configuración por default que tiene Anaconda.\n",
    "\n",
    "Si algo llegase a fallar en el (base) por algún paquete que instalemos mal, es muy posible que toque **reinstalar** todo el software de Anaconda desde cero, lo cual es bastante largo en Windows.\n",
    "\n",
    "En cambio, si tenemos un ambiente separado del (base) y lo dañamos, podremos eliminarlo facilmente sin afectar al (base), ejecutando \n",
    "\n",
    "```conda env remove --name myenv -y```\n",
    "\n",
    "Esto es una manera bastante inteligente de trabajar con software.\n",
    "\n",
    "Muchos lenguajes cerrados de programación no tienen estas opciones, por lo que si falla algo interno, es necesario llamar a soporte y esperar un buen tiempo a que se solucione el problema. \n",
    "\n",
    "En algunas ocasiones, se tendrá que esperar a que se realice una nueva versión del programa.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "zpVD6VkHESD7"
   },
   "source": [
    "## <span style=\"color:#4361EE\">Tareas:</span>\n",
    "\n",
    "- Crear un ambiente llamado tf2 que contenga jupyter, jupyterlab y tensorflow.\n",
    "\n",
    "- ¿Qué versión de Python es implicada por la instalación?, ¿Es la más actual?\n",
    "\n",
    "- Crear un ambiente llamado clase que contenga jupyter, jupyterlab, numpy y pandas.\n",
    "\n",
    "- ¿Qué versión de Numpy es implicada por la instalación?, ¿Es la más actual?\n",
    "\n",
    "- Halle en la Web algún código que ejecute en versiones viejas de Python no compatibles con las actuales."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<figure>\n",
    "<img src=\"../imagenes/logo-final-ap.png\"  width=\"80\" height=\"80\" align=\"right\"/> \n",
    "</figure>"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "Ambientes.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}