Trabajar con paquetes

Completado

La mayoría de los programas que escriba se basarán en el código escrito por otros usuarios. Este código suele tener el formato de paquetes, que son módulos o bibliotecas externos que se incluyen en el proyecto. Al igual que con cualquier proyecto que requiera un conjunto de recursos, es importante tener en cuenta cómo se asegurará de que los recursos adecuados estén disponibles para el programa.

Un buen punto de partida es aprender a administrar el programa. Una opción es que piense en el programa como si fuera un proyecto. Python se aproxima a este enfoque mediante algo denominado entornos virtuales.

¿Qué es un entorno virtual?

Tiene una máquina de desarrollo. En esa máquina, es posible que tenga una versión de Python instalada o una versión de una biblioteca que quiera usar. ¿Qué ocurre cuando mueve el programa a una máquina que tiene instalada una versión diferente de Python o versiones diferentes de las bibliotecas de las que depende?

Una cosa que no quiere hacer es asumir que el programa funcionará y que solo puede instalar la última versión de las bibliotecas de las que depende. Si lo hace, podría acabar destruyendo la capacidad de los demás programas para funcionar en la máquina de destino. La solución es encontrar una manera de que la aplicación funcione de forma aislada.

La solución de Python para estos problemas es un entorno virtual. Un entorno virtual es una copia independiente de todo lo necesario para ejecutar el programa. Esto incluye el intérprete de Python y todas las bibliotecas que necesita el programa. Mediante un entorno virtual, puede asegurarse de que el programa tendrá acceso a las versiones y los recursos correctos para ejecutarse correctamente.

El flujo de trabajo básico tiene este aspecto:

  1. Cree un entorno virtual que no afecte al resto de la máquina.
  2. Entre en el entorno virtual, donde debe especificar la versión de Python y las bibliotecas que necesita.
  3. Desarrolle el programa.

Creación de un entorno virtual

Para crear un entorno virtual, llame al módulo venv. El módulo espera un nombre como un argumento. Configurará su propio entorno virtual en la siguiente unidad, por lo que no es necesario ejecutar nada del siguiente código.

Siga estos pasos.

  1. Vaya al directorio donde desea almacenar el proyecto.

  2. Use el siguiente comando para llamar al módulo venv.

    python -m venv env
    

    En este momento, se crean automáticamente algunos directorios. Los nombres de directorio difieren ligeramente en función del sistema operativo.

    Los directorios se parecen a esto en Windows:

    /env
      /include
      /lib
      /Scripts
    

    Los directorios se parecen a esto en Linux y macOS:

    /env
      /bin
      /include
      /lib
    

    El entorno necesita el directorio env para realizar un seguimiento de detalles como qué versión de Python y qué bibliotecas está usando. No coloque los archivos de programa en el directorio env. Se recomienda poner los archivos en un directorio denominado src o algo similar. La estructura del proyecto podría tener un aspecto similar al siguiente:

    /env
    /src
      program.py  
    

Active el entorno virtual:

En este momento, ya tiene un entorno virtual, pero no ha empezado a usarlo. Para usarlo, debe activarlo mediante una llamada a un script activate.

Este es el aspecto de la activación en Windows:

C:\ .. \env\Scripts\activate

Este es el aspecto de la activación en Linux and macOS:

source env/bin/activate

La llamada a activate cambia el símbolo del sistema. Le precede (env) y tiene un aspecto similar al de este ejemplo:

(env) -> path/to/project

En este momento, está dentro de su entorno virtual. Todo lo que haga se ejecuta de forma aislada.

¿Qué es un paquete?

Una de las principales ventajas de usar bibliotecas externas es que se acelera el tiempo de desarrollo del programa. Puede capturar este tipo de biblioteca en Internet. Pero al capturar e instalar estas bibliotecas a través de un entorno virtual, se asegura de instalar estas bibliotecas solo para el entorno virtual y no globalmente para toda la máquina.

Instalación de un paquete

Instale un paquete mediante pip. El comando pip usa el índice de paquetes de Python, o PyPi en su forma abreviada, para saber dónde obtener los paquetes. Puede visitar el sitio web de PyPi para ver qué paquetes están disponibles.

Para instalar un paquete, ejecute pip install desde el directorio env, como en este ejemplo:

pip install python-dateutil

Si ejecuta el comando anterior, descargará e instalará dateutil, un paquete para analizar el formato de archivo .yml. Una vez instalado el paquete, puede verlo en la lista si expande el directorio lib en env, de la siguiente forma:

/env
  /lib
    /dateutil

Para ver qué paquetes están ahora instalados en el entorno virtual, puede ejecutar pip freeze. Este comando genera una lista de los paquetes instalados en el terminal:

python-dateutil==2.8.2
six==1.16.0

Nota:

La razón por la que la lista anterior contiene algo más que simplemente pipdate es que pipdate se basa en otras bibliotecas que también se capturan.

Para asegurarse de que estos paquetes solo existen en el entorno virtual, intente salir de ese entorno mediante una llamada a deactivate:

deactivate

Observe cómo cambia el símbolo del sistema del terminal. Ya no va precedido de (env) y ha cambiado a esta apariencia:

path/to/project

Si ejecuta pip freeze, verá una lista mucho más larga de dependencias. Esta lista indica que se muestran todos los paquetes instalados en la máquina en lugar de solo los que están instalados en el entorno virtual.

Más formas de instalar un paquete

También puede usar los siguientes comandos para instalar un paquete:

  • Tener un conjunto de archivos en la máquina e instalar desde ese origen:

    cd <to where the package is on your machine>
    python3 -m pip install .
    
  • Instalar desde un repositorio de GitHub que proporciona control de versiones:

    git+https://github.com/your-repo.git
    
  • Instalar desde un archivo comprimido:

    python3 -m pip install package.tar.gz
    

Uso de un paquete instalado

Ahora tiene un paquete instalado. ¿Cómo se usa en el código?

Asegúrese de que tiene un directorio para los archivos. Se recomienda llamar al directorio src y agregar un archivo de Python de punto de entrada denominado app.py. Ahora agregue código para llamar a dateutil:

from datetime import *
from dateutil.relativedelta import *
now = datetime.now()
print(now)

now = now + relativedelta(months=1, weeks=1, hour=10)

print(now)

Ejecute la aplicación:

python app.py

El resultado debe parecerse a este:

2023-01-30 17:04:24.799976
2023-03-07 10:04:24.799976