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í:

img

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

Laragon provee un moderno y poderoso entorno de desarrollo que incontables personas aman y usan cada día.

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.

img

Desmarcar los checkbox de:

  • tcl/tk and IDLE
  • py launcher.

Después dar click en Next

img

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.

img

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.

img

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

Fuente: https://stackoverflow.com/questions/2241891 — How to initialize a dict with keys from a list and empty value in Python?

No tener a la mano este apunte me costó la prueba técnica para un trabajo.