Content for Decem's Python course.
1{
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {
6 "slideshow": {
7 "slide_type": "slide"
8 }
9 },
10 "source": [
11 "## 2. Instalación de Python y creación de entornos virtuales. Introducción a Jupyter."
12 ]
13 },
14 {
15 "cell_type": "markdown",
16 "metadata": {
17 "slideshow": {
18 "slide_type": "slide"
19 }
20 },
21 "source": [
22 "### Instalación de Python para el desarrollo\n",
23 "\n",
24 "Python puede ser instalado en practicamente cualquier sistema operativo. La forma más sencilla es acceder a [Python.org](https://www.python.org/downloads/) y descargar la última versión para tu plataforma."
25 ]
26 },
27 {
28 "cell_type": "markdown",
29 "metadata": {
30 "slideshow": {
31 "slide_type": "slide"
32 }
33 },
34 "source": [
35 "### Instalación de Python en Windows\n",
36 "\n",
37 "Una forma sencilla de instalar Python en Windows es usar [Chocolatey](https://chocolatey.org/install). Después de seguir las instrucciones de su página web para instalar este gestor de paquetes para Windows, se puede instalar Python 3 directamente desde una terminal con el comando:\n",
38 "\n",
39 "```\n",
40 "choco install python\n",
41 "```"
42 ]
43 },
44 {
45 "cell_type": "markdown",
46 "metadata": {
47 "slideshow": {
48 "slide_type": "slide"
49 }
50 },
51 "source": [
52 "### Instalación de Python en MacOS\n",
53 "\n",
54 "La forma más sencilla de tener la última versión de Python 3 en MacOS es instalarla desde [Homebrew](https://brew.sh/index_es). Una vez tenemos este gestor de paquetes instalado, podemos instalar Python 3 con el siguiente comando:\n",
55 "\n",
56 "```\n",
57 "brew install python\n",
58 "```"
59 ]
60 },
61 {
62 "cell_type": "markdown",
63 "metadata": {
64 "slideshow": {
65 "slide_type": "slide"
66 }
67 },
68 "source": [
69 "### Instalación de Python en Linux\n",
70 "\n",
71 "En entornos Linux basados en Ubunto es muy probable que ya tengas una versión de Python 3 instalada. Puedes comprobar que versión tienes con el siguiente comando:\n",
72 "\n",
73 "```\n",
74 "python3 --version\n",
75 "```\n",
76 "\n",
77 "Si tienes Ubuntu 16.10 o nuevo, puedes instalar Python 3.6 con los siguientes comandos:\n",
78 "\n",
79 "```\n",
80 "$ sudo apt-get update\n",
81 "$ sudo apt-get install python3.6\n",
82 "```"
83 ]
84 },
85 {
86 "cell_type": "markdown",
87 "metadata": {
88 "slideshow": {
89 "slide_type": "slide"
90 }
91 },
92 "source": [
93 "### Entornos virtuales\n",
94 "\n",
95 "Si ejecutamos Python desde nuestras instalaciones, ya sea desde la terminal o desde un script, estaremos usando nuestro sistema como entorno de ejecución.\n",
96 "\n",
97 "Sin embargo, puede darse el caso de que durante el desarrollo de varias aplicaciones, necesitemos usar en cada una de ellas versiones de librerías externas diferentes.\n",
98 "\n",
99 "Para estos casos, y en general, **siempre que se desarrolle en Python**, es recomendable crear un **entorno virtual** que esté aislado del sistema y que permita tener no solo versiones de librerías solo aplicables a un proyecto, sino que además permita tener intérpretes distintos."
100 ]
101 },
102 {
103 "cell_type": "markdown",
104 "metadata": {
105 "slideshow": {
106 "slide_type": "slide"
107 }
108 },
109 "source": [
110 "### Módulo venv\n",
111 "\n",
112 "Python proporciona un módulo por defecto para la creación de entornos virtuales.\n",
113 "\n",
114 "#### Crear entorno virtual\n",
115 "\n",
116 "```\n",
117 "$ python -m venv <dirección del entorno virtual>\n",
118 "```"
119 ]
120 },
121 {
122 "cell_type": "markdown",
123 "metadata": {
124 "slideshow": {
125 "slide_type": "slide"
126 }
127 },
128 "source": [
129 "```\n",
130 "├── bin\n",
131 "│ ├── activate\n",
132 "│ ├── activate.csh\n",
133 "│ ├── activate.fish\n",
134 "│ ├── python -> /Users/marcos/.virtualenvs/python-course-u7RvBC-m/bin/python\n",
135 "│ └── python3 -> python\n",
136 "├── include\n",
137 "├── lib\n",
138 "│ └── python3.6\n",
139 "│ └── site-packages\n",
140 "└── pyvenv.cfg\n",
141 "\n",
142 "5 directories, 6 files\n",
143 "```"
144 ]
145 },
146 {
147 "cell_type": "markdown",
148 "metadata": {
149 "slideshow": {
150 "slide_type": "slide"
151 }
152 },
153 "source": [
154 "#### Activar un entorno virtual\n",
155 "\n",
156 "Para activar el entorno virtual, sólo hay que usar el script de `bin/activate` que se crea dentro de la ruta del entorno virtual.\n",
157 "\n",
158 "```\n",
159 "$ source <dirección del entorno virtual>/bin/activate\n",
160 "(<dirección del entorno virtual>) $\n",
161 "```"
162 ]
163 },
164 {
165 "cell_type": "markdown",
166 "metadata": {
167 "slideshow": {
168 "slide_type": "slide"
169 }
170 },
171 "source": [
172 "Por defecto, el entorno virtual no tiene acceso a los paquetes instalados en el sistema. Si queremos que se puedan acceder, sólo hay que usar el parámetro `--system-site-packages`.\n",
173 "\n",
174 "```\n",
175 "$ python -m venv --system-site-packages <dirección del entorno virtual>\n",
176 "```"
177 ]
178 },
179 {
180 "cell_type": "markdown",
181 "metadata": {
182 "slideshow": {
183 "slide_type": "slide"
184 }
185 },
186 "source": [
187 "#### Desactivar un entorno virtual\n",
188 "\n",
189 "Para desactivar el entorno virtual, sólo hay que usar el comando de `deactivate`.\n",
190 "\n",
191 "```\n",
192 "(<dirección del entorno virtual>) $ deactivate\n",
193 "$\n",
194 "```"
195 ]
196 },
197 {
198 "cell_type": "markdown",
199 "metadata": {
200 "slideshow": {
201 "slide_type": "slide"
202 }
203 },
204 "source": [
205 "### La forma recomendada: pipenv\n",
206 "\n",
207 "Hay diferentes alternativas al módulo de `venv` que aportan más funcionalidades, pero la más recomendada a día de hoy es [pipenv](https://docs.pipenv.org/).\n",
208 "\n",
209 "Podemos instalar a nivel de sistema `pipenv` con el comando:\n",
210 "\n",
211 "```\n",
212 "$ pip install pipenv\n",
213 "```\n"
214 ]
215 },
216 {
217 "cell_type": "markdown",
218 "metadata": {
219 "slideshow": {
220 "slide_type": "slide"
221 }
222 },
223 "source": [
224 "#### Nota para MacOS\n",
225 "\n",
226 "Para instalar a nivel de usuario, se necesita usar el siguiente comando:\n",
227 "\n",
228 "```\n",
229 "$ python3 -m pip install --user --install-option=\"--prefix=\" pipenv\n",
230 "```"
231 ]
232 },
233 {
234 "cell_type": "markdown",
235 "metadata": {
236 "slideshow": {
237 "slide_type": "slide"
238 }
239 },
240 "source": [
241 "#### Crear entorno virtual con `pipenv`\n",
242 "\n",
243 "Usar `pipenv` es muy sencillo, y basta con ejecutar el siguiente comando en la carpeta donde se tenga el código fuente:\n",
244 "\n",
245 "```\n",
246 "$ pipenv --three\n",
247 "```\n",
248 "\n",
249 "Esto creara el entorno virtual en una carpeta por defecto, y además, creará dos dicheros:\n",
250 "\n",
251 "- `Pipfile`\n",
252 "- `Pipfile.lock`\n",
253 "\n",
254 "Que se usarán para gestionar las dependencias.\n"
255 ]
256 },
257 {
258 "cell_type": "markdown",
259 "metadata": {
260 "slideshow": {
261 "slide_type": "slide"
262 }
263 },
264 "source": [
265 "- Se creará un *virtualenv* de forma automática cuando no exista.\n",
266 "- Si no se pasan parámetros, todos los paquetes en los Pipfiles se instalarán.\n",
267 "- Se puede inicializar con Python 3 con `pipenv --three`\n",
268 "- Se puede inicializar con Python 2 con `pipenv --two`"
269 ]
270 },
271 {
272 "cell_type": "markdown",
273 "metadata": {
274 "slideshow": {
275 "slide_type": "slide"
276 }
277 },
278 "source": [
279 "#### Ejecutar python del entorno virtual \n",
280 "\n",
281 "Puedes ejecutar comandos usando el entorno virtual sin necesidad de activarlo.\n",
282 "\n",
283 "```\n",
284 "$ pipenv run python script.py\n",
285 "```"
286 ]
287 },
288 {
289 "cell_type": "markdown",
290 "metadata": {
291 "slideshow": {
292 "slide_type": "slide"
293 }
294 },
295 "source": [
296 "#### Activar entorno virtual\n",
297 "\n",
298 "Para activar el entorno virtual, simplemente desde la carpeta del proyecto, ejecutamos:\n",
299 "\n",
300 "```\n",
301 "$ pipenv shell\n",
302 "```\n",
303 "\n",
304 "Esto crea una nueva sesión de la terminal, con el entorno virtual activado."
305 ]
306 },
307 {
308 "cell_type": "markdown",
309 "metadata": {
310 "slideshow": {
311 "slide_type": "slide"
312 }
313 },
314 "source": [
315 "#### Fichero `.env`\n",
316 "\n",
317 "Al activar el virtualenv de esta forma, una funcionalidad que es interesante es que si existe un fichero `.env` se cargará automáticamente las variables de entorno definidas en este. "
318 ]
319 },
320 {
321 "cell_type": "markdown",
322 "metadata": {
323 "slideshow": {
324 "slide_type": "slide"
325 }
326 },
327 "source": [
328 "### Introducción a Jupyter"
329 ]
330 },
331 {
332 "cell_type": "markdown",
333 "metadata": {
334 "slideshow": {
335 "slide_type": "slide"
336 }
337 },
338 "source": [
339 "#### Paquetes de terceros\n",
340 "\n",
341 "Muchas de las funcionalidades que podemos querer incluir en nuestra aplicación de Python pueden que otras personas ya las hayan desarrollado.\n",
342 "\n",
343 "Para tratar de evitar que se \"reinvente la rueda\", Python cuenta con un repositorio desde donde se pueden bajar todos los paquetes que otros desarrolladores hayan decidido compartir con la comunidad, el **Python Package Index (PyPI)**.\n",
344 "\n",
345 "El PyPI contiene más de 76.000 paquetes de Python que puedes usar en tus aplicaciones."
346 ]
347 },
348 {
349 "cell_type": "markdown",
350 "metadata": {
351 "slideshow": {
352 "slide_type": "slide"
353 }
354 },
355 "source": [
356 "#### Jupyter\n",
357 "\n",
358 "**Jupyter** es un proyecto creado para desarrollar software de código y estándares abiertos y servicios para la computación interactiva usando docenas de lenguajes de programación.\n",
359 "\n",
360 "Un a de las partes esenciales de este proyecto es el **Jupyter Notebook**, que nos permite ejecutar código directametne en el navegador y poder compartir documentos con código interactivo."
361 ]
362 },
363 {
364 "cell_type": "markdown",
365 "metadata": {
366 "slideshow": {
367 "slide_type": "subslide"
368 }
369 },
370 "source": [
371 "**¡Esto es un Jupyter Notebook!**"
372 ]
373 },
374 {
375 "cell_type": "markdown",
376 "metadata": {
377 "slideshow": {
378 "slide_type": "slide"
379 }
380 },
381 "source": [
382 "##### Instalando Jupyter\n",
383 "\n",
384 "Teniendo ya Python en nuestro sistema, y asumiendo que hemos usado el sistema recomendado para la gestión de entornos virtuales, **pipenv**, podemos instalar Jupyter con el siguientes comando:\n",
385 "\n",
386 "```\n",
387 "$ pipenv install jupyter\n",
388 "```"
389 ]
390 },
391 {
392 "cell_type": "markdown",
393 "metadata": {
394 "slideshow": {
395 "slide_type": "slide"
396 }
397 },
398 "source": [
399 "##### Ejecutando Jupyter Notebook\n",
400 "\n",
401 "Para lanzar la aplicación web Jupyter Notebook, simplemente tenemos que ejecutar el siguiente comando:\n",
402 "\n",
403 "```\n",
404 "$ pipenv run jupyter notebook\n",
405 "```\n",
406 "\n",
407 "Esto lanzará el navegador web con la interfaz web de Jupyter Notebook en la URL http://localhost:8888/tree."
408 ]
409 },
410 {
411 "cell_type": "markdown",
412 "metadata": {
413 "slideshow": {
414 "slide_type": "slide"
415 }
416 },
417 "source": [
418 ""
419 ]
420 },
421 {
422 "cell_type": "markdown",
423 "metadata": {
424 "slideshow": {
425 "slide_type": "slide"
426 }
427 },
428 "source": [
429 "##### Crear un Notebook\n",
430 "\n",
431 "Para crear un nuevo _notebook_ sólo tenemos que hacer click en el botón de `New` (arriba a la derecha) y seleccionar Python 3."
432 ]
433 },
434 {
435 "cell_type": "markdown",
436 "metadata": {
437 "slideshow": {
438 "slide_type": "slide"
439 }
440 },
441 "source": [
442 ""
443 ]
444 },
445 {
446 "cell_type": "markdown",
447 "metadata": {
448 "slideshow": {
449 "slide_type": "slide"
450 }
451 },
452 "source": [
453 "##### Ejecutar celdas\n",
454 "\n",
455 "Un _notebook_ recién creado empieza por defeco con una celda de código. En estas celdas podemos ejecutar código Python en nuestro propio navegador.\n",
456 "\n",
457 "Para probarlo, pdemos escribir:\n",
458 "\n",
459 "```python\n",
460 "print('Hello Jupyter!')\n",
461 "```\n",
462 "\n",
463 "Y luego ejecutar la celda con `Shift` + `Enter`\n"
464 ]
465 },
466 {
467 "cell_type": "markdown",
468 "metadata": {
469 "slideshow": {
470 "slide_type": "slide"
471 }
472 },
473 "source": [
474 ""
475 ]
476 },
477 {
478 "cell_type": "markdown",
479 "metadata": {
480 "slideshow": {
481 "slide_type": "slide"
482 }
483 },
484 "source": [
485 "##### Tipos de celdas\n",
486 "\n",
487 "Tenemos dos tipos de celda esencialmente en Jupyter:\n",
488 "\n",
489 "- Code\n",
490 "- Markdown\n",
491 "\n",
492 "Ya hemos visto un ejemplo de celda de tipo `Code`, que permite ejecutar código Python. Por otro lado, la de tipo `Markdown` nos permite añadir texto enriquecido usando la sintaxis de Markdown."
493 ]
494 },
495 {
496 "cell_type": "markdown",
497 "metadata": {
498 "slideshow": {
499 "slide_type": "slide"
500 }
501 },
502 "source": [
503 "##### Exportar notebooks\n",
504 "\n",
505 "Jupyter permite exportar los notebooks a los siguientes formatos usando la herramienta `nbconvert`:\n",
506 "\n",
507 "- HTML\n",
508 "- LaTeX\n",
509 "- PDF\n",
510 "- RevealJS\n",
511 "- Markdown\n",
512 "- ReStructured Text\n",
513 "- Executable script"
514 ]
515 },
516 {
517 "cell_type": "markdown",
518 "metadata": {
519 "slideshow": {
520 "slide_type": "fragment"
521 }
522 },
523 "source": [
524 "\n",
525 " $ jupyter nbconvert <input notebook> --to <output format>\n"
526 ]
527 }
528 ],
529 "metadata": {
530 "celltoolbar": "Slideshow",
531 "kernelspec": {
532 "display_name": "Python 3",
533 "language": "python",
534 "name": "python3"
535 },
536 "language_info": {
537 "codemirror_mode": {
538 "name": "ipython",
539 "version": 3
540 },
541 "file_extension": ".py",
542 "mimetype": "text/x-python",
543 "name": "python",
544 "nbconvert_exporter": "python",
545 "pygments_lexer": "ipython3",
546 "version": "3.7.1"
547 }
548 },
549 "nbformat": 4,
550 "nbformat_minor": 2
551}