[ Python  Dev  AI  OS  ]

Algún dia me animaré a hacer algun post/video sobre cómo hago dev y debug sobre python, pero mientras tanto, valga este post para recodar cómo preparar nuestro PC para desarrollo con python. Conda es un excelente entorno para data science, que incluye de serie y de forma gratuita 2 cosas super-utiles como son el editor “Spider” y la gestión de entornos muy cómoda.

En este post vamos a ver rápidamente cómo configurar nuestro entorno python con conda para desarrollo data science sobre Windows y sobre Linux.

anaconda gui

Para configurarlo te propongo:

Windows

Instalación

anaconda prompt

  • Lanza where conda y copia la ubicación de su ejecutable
  • Abre “Advanced system settings”

advanced system settings

  • Añade a tu PATH el path de conda que te salga, que en mi caso es:
C:\Users\enriq\anaconda3\Library\bin
C:\Users\enriq\anaconda3\Scripts
C:\Users\enriq\anaconda3\condabin
C:\Users\enriq\anaconda3
  • ya deberia funcionar lanzando conda --version

conda-version

  • Asegurate que tienes la última version de anaconda conda update anaconda
❯ conda update anaconda
Collecting package metadata (current_repodata.json): done
Solving environment: done

# All requested packages already installed.
  • Actualiza spider a la version 5
conda install spider=5.0.0

Aislar entornos de trabajo

Es mas que interesante crear entornos de trabajo para cada proyecto. Esto es útil por ejemplo para poder tener diferentes versiones de python/librerias que puedan ser incompatibles entre ellas.

Por ejemplo, si quisiéramos crearnos un entorno para trabajar con la IA GPT-Neo, que en el momento de escribir estas líneas está únicamente disponible en la rama main de huggingface (no en su paquete oficial todavía)

Crear un entorno

conda create --name gptneo python=3.8.8

Cuyo output…

❯ conda create --name gptneo python=3.8.8
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\enriq\anaconda3\envs\gptneo

  added / updated specs:
    - python=3.8.8


The following NEW packages will be INSTALLED:

  ca-certificates    pkgs/main/win-64::ca-certificates-2021.4.13-haa95532_1
  certifi            pkgs/main/win-64::certifi-2020.12.5-py38haa95532_0
  openssl            pkgs/main/win-64::openssl-1.1.1k-h2bbff1b_0
  pip                pkgs/main/win-64::pip-21.0.1-py38haa95532_0
  python             pkgs/main/win-64::python-3.8.8-hdbf39b2_5
  setuptools         pkgs/main/win-64::setuptools-52.0.0-py38haa95532_0
  sqlite             pkgs/main/win-64::sqlite-3.35.4-h2bbff1b_0
  vc                 pkgs/main/win-64::vc-14.2-h21ff451_1
  vs2015_runtime     pkgs/main/win-64::vs2015_runtime-14.27.29016-h5e58377_2
  wheel              pkgs/main/noarch::wheel-0.36.2-pyhd3eb1b0_0
  wincertstore       pkgs/main/win-64::wincertstore-0.2-py38_0


Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate gptneo
#
# To deactivate an active environment, use
#
#     $ conda deactivate

Activar el entorno

Para activar el entorno por línea de comandos puedes lanzar conda activate gptneo, pero si lo que quieres es desde code, hacer el cambio…la opción mas facil sería lanzar F1->Python: select interpreter

select interpreter

que como verás, ya automáticamente detecta el nuevo entorno:

python gptneo

Instalar paquetes en el entorno

Una vez asegurados en el entorno de trabajo, ya podemos instalar nuestros paquetes con normalidad. En mi caso voy a desplegar la rama main de git de huggingface, para poder acceder a las mejoras Transformer con las que poder desplegar una AI con GPTNeo 2.7B (lo mas parecido ahora mismo a la versión light de GPT-3)

(base) D:\git\enriquecatala.github.io>conda activate gptneo
(gptneo) D:\git\enriquecatala.github.io>pip install git+https://github.com/huggingface/transformers@master
Collecting git+https://github.com/huggingface/transformers@master
  Cloning https://github.com/huggingface/transformers (to revision master) to c:\users\enriq\appdata\local\temp\pip-req-build-2ebx9m9g
  Running command git clone -q https://github.com/huggingface/transformers 'C:\Users\enriq\AppData\Local\Temp\pip-req-build-2ebx9m9g'
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Collecting sacremoses
  Downloading sacremoses-0.0.45-py3-none-any.whl (895 kB)
     |████████████████████████████████| 895 kB 6.8 MB/s
Collecting huggingface-hub==0.0.8
  Downloading huggingface_hub-0.0.8-py3-none-any.whl (34 kB)
Collecting filelock
  Downloading filelock-3.0.12-py3-none-any.whl (7.6 kB)
Collecting tqdm>=4.27
  Downloading tqdm-4.60.0-py2.py3-none-any.whl (75 kB)
     |████████████████████████████████| 75 kB 5.1 MB/s
Collecting packaging
  Downloading packaging-20.9-py2.py3-none-any.whl (40 kB)
     |████████████████████████████████| 40 kB 2.7 MB/s
Collecting numpy>=1.17
  Downloading numpy-1.20.3-cp38-cp38-win_amd64.whl (13.7 MB)
     |████████████████████████████████| 13.7 MB ...
Collecting requests
  Downloading requests-2.25.1-py2.py3-none-any.whl (61 kB)
     |████████████████████████████████| 61 kB 3.8 MB/s
Collecting regex!=2019.12.17
  Downloading regex-2021.4.4-cp38-cp38-win_amd64.whl (270 kB)
     |████████████████████████████████| 270 kB ...
Collecting tokenizers<0.11,>=0.10.1
  Downloading tokenizers-0.10.2-cp38-cp38-win_amd64.whl (2.0 MB)
     |████████████████████████████████| 2.0 MB 6.8 MB/s
Collecting pyparsing>=2.0.2
  Downloading pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
     |████████████████████████████████| 67 kB 2.8 MB/s
Collecting idna<3,>=2.5
  Downloading idna-2.10-py2.py3-none-any.whl (58 kB)
     |████████████████████████████████| 58 kB ...
Collecting chardet<5,>=3.0.2
  Downloading chardet-4.0.0-py2.py3-none-any.whl (178 kB)
     |████████████████████████████████| 178 kB ...
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.4-py2.py3-none-any.whl (153 kB)
     |████████████████████████████████| 153 kB ...
Requirement already satisfied: certifi>=2017.4.17 in c:\users\enriq\anaconda3\envs\gptneo\lib\site-packages (from requests->transformers==4.7.0.dev0) (2020.12.5)
Collecting six
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting joblib
  Downloading joblib-1.0.1-py3-none-any.whl (303 kB)
     |████████████████████████████████| 303 kB 6.4 MB/s
Collecting click
  Downloading click-8.0.0-py3-none-any.whl (96 kB)
     |████████████████████████████████| 96 kB 6.4 MB/s
Collecting colorama
  Downloading colorama-0.4.4-py2.py3-none-any.whl (16 kB)
Building wheels for collected packages: transformers
  Building wheel for transformers (PEP 517) ... done
  Created wheel for transformers: filename=transformers-4.7.0.dev0-py3-none-any.whl size=2259729 sha256=45d5f23c6d779450d66f26a1d9956684a0e88a0689b36b7e4b616dc6690149b2
  Stored in directory: C:\Users\enriq\AppData\Local\Temp\pip-ephem-wheel-cache-8am4pg42\wheels\29\97\ba\eda99aa62c8a9414a8754b0b94ed3ae80559d7c8293929140f
Successfully built transformers
Installing collected packages: urllib3, idna, colorama, chardet, tqdm, six, requests, regex, pyparsing, joblib, filelock, click, tokenizers, sacremoses, packaging, numpy, huggingface-hub, transformers
Successfully installed chardet-4.0.0 click-8.0.0 colorama-0.4.4 filelock-3.0.12 huggingface-hub-0.0.8 idna-2.10 joblib-1.0.1 
numpy-1.20.3 packaging-20.9 pyparsing-2.4.7 regex-2021.4.4 requests-2.25.1 sacremoses-0.0.45 six-1.16.0 tokenizers-0.10.2 tqdm-4.60.0 transformers-4.7.0.dev0 urllib3-1.26.4

Y ya está, tenemos el entorno nuevo, con huggigface transformers utilizando la última versión disponible estable, que va por delante del propio paquete oficial huggingface (que es lo que quería enseñarte yo en este caso de ejemplo)

NOTA: Recuerda que cada entorno está totalmente aislado del resto, y esto implica que incluso el ide Spyder no estará disponible en nuestro nuevo environment, lo que quiere decir que lo tendrás que instalar ahi tambien :)

conda install spider=5.0.0

Linux

En el caso de linux, pues se puede scriptar mas facilmente para variar :)

conda

Descargar anaconda

Lo primero que deberas hacer es entrar aqui y seleccionar la versión que quieras.

En mi caso, voy a instalarlo para Ubuntu 20.04 64 bits y python 3.8 https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh

cd /tmp
# descargar
curl -L -o anaconda-installer.sh https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh
# instalar
bash anaconda-installer.sh

En este momento te pedirá leer los términos de licencia, que obviamente deberás aceptar y te mostrará el path por defecto (que podrás cambiar donde se instalará)

Anaconda3 will now be installed into this location:
/home/enrique/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/home/enrique/anaconda3] >>>
PREFIX=/home/enrique/anaconda3
Unpacking payload ...
Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: /home/enrique/anaconda3

  added / updated specs:
    - _ipyw_jlab_nb_ext_conf==0.1.0=py37_0
....
y aqui un largo etcétera de librerias ...

una vez acabada la instalación, solo queda añadir el path, que te preguntará

installation finished.
Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /home/enrique/.bashrc ? [yes|no]

Update conda

Es altamente recomendable actualizar a la última version de conda, que muy probablemente no sea la que se instale con el script anterior. Para actualizar conda en linux

conda update conda