-
Notifications
You must be signed in to change notification settings - Fork 17
/
ambiente-basico.Rmd
149 lines (98 loc) · 6.52 KB
/
ambiente-basico.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
---
title: "Control de ambiente basico y packrat"
author: "Andrea Fernandez"
date: "`r format(Sys.time(), '%Y-%m-%d')`"
output:
html_document:
toc: yes
toc_float: yes
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = T, eval = F)
```
# Ambiente controlado
En el trabajo colaborativo uno de los problemas típicos se resume en la frase
*en mi compu si corre*. La analítica reproducible y fácil de insertar en un
ambiente de producción es fundamental para minimizar la talacha y que lo que
se realice se (re)utilice.
Existen múltiples maneras de trabajar de manera que se resuelva el problema de
las versiones de software y sus dependencias. Una comprehensiva, por ejemplo, es
`docker`.
Debido a que el trabajo de analítica suele concentrarse alrededor de `R` y de `python`,
se recomienda al menos usar dos sistemas de administración: `packrat` y `virtualenv`, respectivamente.
Dejaremos para el día de mañana una solución más completa a través de imagenes y contenedores (que también versionamos).
# Packrat
[Packrat](https://rstudio.github.io/packrat/) es un systema de administración de dependencias para R que busca eliminar los problemas que suele haber para utilizar código realizado en diferentes momentos o máquinas con diferentes versiones de las librerías, entre los típicos son:
- La falta de control sobre los paquetes que se necesitaban instalar para correr un script específico.
- Instalar paquetes en el ambiente global y dejarlos para siempre instalados en las computadoras porque no se sabe si algo se romperá al quitarlos.
- Romper código de otros proyectos por actualizar un paquete en otro.
Packrat permite que os proyectos en R estén:
- **Aislados**: cada proyecto tiene su paquetería privada.
- **Portable**: puedes transferir rápidamente los proyectos de una computadora a otra -y a través de distintas plataformas- pues facilita la instalación de toda la paquetería sobre la que descansa el proyecto.
- **Reproducible**: guarda las versiones exactas sobre las que el proyecto fue trabajado y éstos son los que son instalados en cualquier ambiente.
## El directorio del proyecto
Packrat se asocia a un directorio específico. En nuestro caso, el repositorio del diplomado tiene packrat. Al iniciar una sesión de R dentro de un directorio asociado a un packrat, R va a utilizar únicamente los paquetes dentro de esa librería privada. Al instalar, remover o actualizar un paquete dentro de ese directorio, esos cambios se harán en la librería privada.
Se guarda en el proyecto toda la información que packrat necesita para poder recrear el conjunto de librerías en cualquier otra máquina.
## Instalación
El paquete está en el CRAN y se instala desde R con el comando.
```{r}
install.packages("packrat")
```
## Inicializarlo
Al iniciar un proyecto, el que sea, que use R, lo recomendable es asociarle packrat. Esto se hace con el comando `packrat::init`.
```{r}
packrat::init("~/prueba-packrat")
```
Con esto, al trabajar en el directorio `"~/prueba-packrat"` ya estás en un proyecto de packrat con su librería privada.
*Este paso ya no lo debes realizar debido a que ya se hizo para el repositorio que clonaste.*
Un proyecto de packrat se distingue porque -igual que git- tiene archivos y directorios adicionales que se crean con la función `init()`
- `packrat/packrat.lock`: lista las versiones de los paquetes que fueron utilizadas. Este archivo no debe editarse a mano.
- `packrat/packrat.opts`: guarda las opciones de configuración para el proyecto. Este se puede modificar con las opciones `get_opts` y `set_opts`. La lista completa de opciones se puede ver al escribir en la consola de R `?"packrat-options"`.
- `packrat/lib/`: paquetes para el proyecto.
- `packrat/src/`: paquetes para todas las dependencias.
- `.Rprofile`: Le dice a R que la lista específica de librerías que debe utilizar cuando está en ese directorio (o cualquiera de sus subdirectorios) es la privada del proyecto que gestiona packrat.
## Agregar, remover y actualizar paquetes
1. Inicializa `R` dentro de un proyecto packrat.
2. Se instala como siempre, usando `install.packages()`
```{r}
install.packages("tidyr")
```
3. Se toma un `snapshot` para decirle a packrat que guarde los cambios
```{r}
packrat::snapshot()
```
Aquí agrega lo que necesita a los folders mencionados antes para poder recrear las versiones y dependencisa. También modifica el archivo `packrat.lock`.
4. En cualquier momento, puedes checar el status
```{r}
packrat::status()
```
Debe darte el mensaje **Up to date**.
¡Y listo!
## Otras cosas importantes
- Packrat puede incorporar paquetes que no estan en CRAN.
- Puede restaurar un snapshot (de manera similar a la que un juego puedes regresar al último checkpoint).
> Ejercicio:
> Restaurando un snapshot en el ejemplo de juguete
Ve a la carpeta "~/prueba-packrat"
Muevete a la carpeta `packrat/`
Borra la libreria `rm -R lib/`
Regresa a la carpeta del proyecto `cd ..`
Inicializa R
... y todo se restaura.
## Ligas utiles
- [Comandos comunes y listas de opciones](https://rstudio.github.io/packrat/commands.html)
- [Packrat en RStudio](https://rstudio.github.io/packrat/rstudio.html) lo hace AUN mas facil.
- [Limitaciones de packrat](https://rstudio.github.io/packrat/limitations.html)
# virtualenv
Similarmente, para python existen muchas maneras de empaquetar el ambiente con el que cierto código *si corría*.
Para facilitar esto, en la máquina virtual que descargaron ya está instalado un ambiente virtual de python.
## Uso básico
1. Éste se llama corriendo `virtualenv prueba` desde el home. Esto crea una carpeta en el home donde estan los ejecutables de python y una copia de pip para instalar otros paquetes. En nuestro caso es `/home/usuario/prueba`.
2. Para activarlo, solo es necesario correr `source ~/prueba/bin/activate`
3. Una vez activo, el nombre del ambiente virtual aparece del lado izquierdo en la consola (e.g. (venv)tu-computadora:tu_proyecto Nombre de Usuario$). Esto ayuda a darse cuenta que ese python específico se encuentra activo.
4. Cuando instalen nuevos paquetes mientras el virtualenv está activado, se instalan con el pip (el instalador de python) de ese ambiente.
5. Para desactivarlo, solamente se teclea `deactivate`, lo que te regresa al python default del sistema.
Para eliminar un ambiente virtual, solo se debe remover el folder.
## Ligas adicionales
- Para una guía rápida de como crear un ambiente y los comandos principales, [ver esta liga](http://docs.python-guide.org/en/latest/dev/virtualenvs/)
- La [documentacion detallada](https://virtualenv.pypa.io/en/stable/)