Apuntes: Python
Mi sabiduría de calle del Python.
Contenido
env
Un entorno virtual (env) es un directorio que contiene una instalación de Python de una versión en particular, además de unos cuantos paquetes adicionales.
Diferentes aplicaciones pueden usar entornos virtuales diferentes con diferentes versiones de dependencias. Lo que, para desarrollo, ayuda a solucionar el problema de compatibilidad de dependencias.
Personalmente me resistía a usar los env
, pensé que para usarlos se tenia que instalar algo extra por ejemplo Conda o Jupyter. Pero no, los env
están incluidos en Python.
Crear un env
Abrir una terminal y posicionarla en el directorio donde se creará el env
, después escribir.
python -m venv tutorial-env
Si se tiene Python2 y Python3 se debe escribir para Python3
python3 -m venv tutorial-env
Activar un env
Abrir una terminal y posicionarla en la carpeta del env creado. Después escribir.
En Windows:
tutorial-env\Scripts\activate.bat
En Ubuntu y similares:
source tutorial-env/bin/activate
Desactivar un env
Escribir lo siguiente o cerrar la terminal.
deactivate
Eliminar un env
Sólo se debe eliminar la carpeta.
Fuente: docs.python.org/es — Entornos virtuales y paquetes
pip, wheel y setuptools
Para librerías modernas de Python es muy común que al instalarlas con pip
muestre un error con CPython
o algún otro.
De manera conceptual, para instalar una librería reciente se debe tener pip
actualizado. Lo mismo aplica para wheel
y setuptools
.
Tener actualizados pip
, wheel
y setuptools
evitará errores al instalar librerías.
Actualizar pip, wheel y setuptools
Abrir una terminal, si esto se hará en un entorno virtual activarlo.
Escribir lo siguiente:
pip install -U pip setuptools wheel
No parace muy intuitivo usar pip
para instalar pip
pero en casi todas las veces lo que hará es actualizarlo a su versión más reciente.
Fuente: spacy.io — pip
requirements.txt
El archivo requirements.txt
contiene una lista de librerías para instalar usando pip
.
pip install -r requirements.txt
El archivo es parecido al siguiente.
fastapi==0.66.1
uvicorn==0.14.0
tensorflow-cpu==2.5.0
Crear requirements.txt con pip freeze
pip freeze > requirements.txt
Consejos para requirements.txt
1
Se aconseja que el archivo siempre se llame requirements.txt.
2
Es recomendado crear el archivo manualmente sin usar freeze > requirements.txt
.
La manera de hacerlo es usar pip freeze
y ver la salida, después agregar manualmente las dependencias.
Ejemplo, si en un env
recién hecho se usa pip install tensorflow
y después pip freeze > requirements.txt
mostrará tensorflow junto con muchas otras dependencias.
Lo que se aconseja hacer es, usar pip freeze
, ubicar tensorflow, crear el archivo requirements.txt y agregar manualmente tensorflow.
3
Es posible agregar cosas poco comunes desde este archivo.
Ejemplo, para spacy y un modelo entrenado de reconocimiento de entidades multilenguaje el archivo requirements.txt se ve como:
spacy==3.1.2
xx-ent-wiki-sm @ https://github.com/explosion/spacy-models/releases/download/xx_ent_wiki_sm-3.1.0/xx_ent_wiki_sm-3.1.0-py3-none-any.whl
4
Para desplegar a producción un proyecto de Python en un servicio en la nube como Heroku, si se tienen problemas con las dependencias se sugiere agregar a requirements.txt las versiones de pip, wheel y setuptools usadas en el desarrollo.
Fuentes
Información de requirements.txt: pip.pypa.io — Requirements Files
Información de pip freeze: pip.pypa.io — pip freeze
Archivos .env y .env.example
De manera conceptual, un archivo .env
contiene variables de gran importancia que se pueden acceder desde cualquier parte de un proyecto de desarrollo.
Un archivo .env
se genera de un archivo .env.example
que contiene las variables vacías o con indicaciones de su contenido.
En Laravel, por ejemplo, estos archivos se ven así:
No se recomienda subir a un repositorio el archivo .env
sólo el .env.example
. Cada vez que se clone el proyecto del repositorio se debe generar un nuevo .env
a partir de .env.example
.
La manera en que yo uso un .env en Python
Se necesita python-dotenv.
Lo siguiente es el contenido de un .env
de ejemplo:
MY_APP_NAME="Un nombre de ejemplo"
Lo siguiente es código de Python que usa el .env
anterior:
from dotenv import load_dotenv
import os
load_dotenv()
def get_env(env_variable):
return os.environ.get(env_variable)
get_env("MY_APP_NAME") # Obtiene "Un nombre de ejemplo" del archivo .env
Python en Laragon
En palabras propias y usando terminos de Python: Es como un env de Python para diferentes desarrollos, por ejemplo, diferentes versiones del framework de Laravel. Donde cada uno está separado. Lo que permite desarrollar con distinas versiones del framework con sus dependencias sin que se estorben entre éstas.
Yo tenía entendido que Laragon era únicamente para Laravel pero en versiones recientes han añadido mediante Quick add frameworks y lenguajes de programación, entre ellos Python.
A veces se necesita una versión en particular de Python, que difiere de la proveída por Laragon, por ejemplo, para FastAPI se necesita Python 3.7+. Y en mi caso la versión de Python proveída era 3.6.1.
En este caso se necesita cambiar la versión de Python en Laragon para usar FastAPI.
La explicación corta para lograrlo es: Instalar Python en modo personalizado en la carpeta de Laragon bin\python\
en lugar de C:\Archivos de Programa\
.
La explicación larga se muestra a continuación.
Cambiar la versión de Python en Laragon
Se usan imágenes del sitio https://programmerclick.com/article/12232400613/
Ir a python.org/downloads/ y descargar alguna versión, en mi caso, la 3.9.10.
Dar doble click para iniciar el instalador, desmarcar los checkbox de:
- Install launcher for all users
- Add Python to PATH.
Después dar click en Customize installation.
Desmarcar los checkbox de:
- tcl/tk and IDLE
- py launcher.
Después dar click en Next
En la ruta de instalación se debe poner la ruta bin\python\
de Laragon. En mi caso es C:\laragon\bin\python\python-3.9.10
. Para otra versión de Python cambiará, ejemplo bin\python\python-3.8.1
.
Finalmente se debe hacer click en Install para empezar la instalación. Al finalizar la instalación cerrar la ventana.
Para escoger que versión de Python usar en Laragon yo lo que hago es.
Click derecho -> Python -> Version -> Python 3.9.10.
Fuente: programmerclick.com — Añadir una nueva versión de Python en Laragon
Crear un diccionario de tipo int inicializado en 0
Hay veces en que se quiere usar un diccionario de python de tamaño variable para guardarle valores como si fuera un acumulador. Por ejemplo, usar un dict como un histograma.
Intuitivamente se piensa en hacer algo como lo siguiente que dará errores:
dict_prueba = dict()
for i in range(10):
dict_prueba[i] += i
print (dict_prueba)
#Esto dará un error, en mi caso de tipo KeyError
Para poder hacer algo como lo anterior sin errores se puede hacer lo siguiente. Pero tiene el inconveniente de que sólo se pueden guardar números:
from collections import defaultdict
dict_prueba_2 = defaultdict(lambda : 0)
for i in range(10):
dict_prueba_2[i] += i
print (dict_prueba_2)
#Ya no dará error.
#Pero limita al dict a guardar solamente números
No tener a la mano este apunte me costó la prueba técnica para un trabajo.