Saltar a contenido

5.Módulos, paquetes y PIP

¿Qué es un módulo?

Un archivo que contiene definiciones y sentencias de Python, que se pueden importar más tarde y utilizar cuando sea necesario.

Un módulo se identifica por su nombre

la Biblioteca Estándar de Python es un conjunto de módulos incluidos junto a python y disponibles sin necesidad de instalar nada adicional.

Cuando se ejecuta un archivo directamente, su variable name se establece a main.

Cuando un archivo se importa como un módulo, su variable name se establece al nombre del archivo (excluyendo a .py).

El módulo math

El módulo math contiene más de 50 funciones y constantes que realizan operaciones matemáticas (como sine(), pow(), factorial()) o aportando valores importantes (como π y la constante de Euler e).

Algunas funciones del módulo math

from math import pi, radians, degrees, sin, cos, tan, asin

ad = 90
ar = radians(ad)
ad = degrees(ar)

print(ad == 90.)
print(ar == pi / 2.)
print(sin(ar) / cos(ar) == tan(ar))
print(asin(sin(ar)) == ar)
from math import pi, radians, degrees, sin, cos, tan, asin

ad = 90
ar = radians(ad)
ad = degrees(ar)

print(ad == 90.)
print(ar == pi / 2.)
print(sin(ar) / cos(ar) == tan(ar))
print(asin(sin(ar)) == ar)

ceil(x)→ devuelve el entero más pequeño mayor o igual que x.

floor(x) → el entero más grande menor o igual que x.

trunc(x) → el valor de x truncado a un entero (ten cuidado, no es equivalente a ceil o floor).

factorial(x) → devuelve x! (x tiene que ser un valor entero y no negativo).

hypot(x, y) → devuelve la longitud de la hipotenusa de un triángulo rectángulo con las longitudes de los catetos iguales a (x) y (y)

https://docs.python.org/3/library/math.html

Importar un módulo

import math # importar un módulo como un todo
import sys
from math import sin, pi # importar solo entidades individuales

print(sin(pi/2))
from module import * # es posible que no puedas evitar conflictos de nombres. No usar!
 # Puede cambiarse el nombre de la entidad importada "sobre la marcha" utilizando as
from math import pi as PI, sin as sine

print(sine(PI/2))
import math as m
print(m.sin(m.pi/2))

Namespace

import math
print(math.sin(math.pi/2))
import math


def sin(x):
    if 2 * x == pi:
        return 0.99999999
    else:
        return None


pi = 3.14

print(sin(pi/2))
print(math.sin(math.pi/2))
from math import sin, pi

print(sin(pi / 2))

pi = 3.14


def sin(x):
    if 2 * x == pi:
        return 0.99999999
    else:
        return None


print(sin(pi / 2))

La función dir()

import math
dir(math)

import os
dir(os)
import math

for name in dir(math):
    print(name, end="\t")

El módulo random

Agrupa más de 60 entidades diseñadas para ayudarte a usar números pseudoaleatorios. No olvides el prefijo "pseudo", ya que no existe un número aleatorio real cuando se trata de generarlos utilizando los algoritmos de la computadora.

Atención

Los números generados por los módulos pueden parecer aleatorios en el sentido de que no se pueden predecir, pero no hay que olvidar que todos se calculan utilizando algoritmos muy refinados. Un generador de números aleatorios toma un valor llamado semilla, lo trata como un valor de entrada, calcula un número "aleatorio" basado en él (el método depende de un algoritmo elegido) y produce una nueva semilla. El factor aleatorio del proceso puede ser aumentado al establecer la semilla tomando un número de la hora actual - esto puede garantizar que cada ejecución del programa comience desde un valor semilla diferente (por lo tanto, usará diferentes números aleatorios). Python realiza dicha inicialización al importar el módulo.

from random import random

for i in range(5):
    print(random())
from random import random, seed
# Debido al hecho de que la semilla siempre se establece con el mismo valor,
# la secuencia de valores generados siempre se ve igual.
seed(0)

for i in range(5):
    print(random())

# 0.8444218515250481
# 0.7579544029403025
# 0.420571580830845
# 0.25891675029296335
# 0.5112747213686085

randrange(fin)

randrange(inicio, fin)

randrange(inicio, fin, incremento)

randint(izquierda, derecha)

from random import randrange, randint

print(randrange(1), end=' ')
print(randrange(0, 1), end=' ')
print(randrange(0, 1, 1), end=' ')
print(randint(0, 1))
from random import randint
lstresult = []
for i in range(0,10):
    lstresult.append(randint(1, 10))

print(lstresult)
import random

numeros = [1,2,3,4,5,6]

# Seleccionar un elemento aleatorio (tirar el dado):
print (random.choice(numeros))
print (random.choice(numeros))
print (random.choice(numeros))

# Obtener una muestra
print (random.sample(numeros,2))
print (random.sample(numeros,3))
print (random.sample(numeros,3))
print (random.sample(numeros,3))

# Barajar
random.shuffle(numeros)
print (numeros)
random.shuffle(numeros)
print (numeros)

# Generar enteros aleatorios entre 0 y 10
print (random.randint(0,10))
print (random.randint(0,10))
print (random.randint(0,10))

# Generar reales aleatorios entre 0 y 1
print(random.random())
print(random.random())
print(random.random())

# Generar n bits aleatorios como entero:
print(random.getrandbits(128))
print(random.getrandbits(256))
print(random.getrandbits(512))
print(random.getrandbits(1024))

El módulo platform

Contiene alrededor de 70 funciones que te permiten sumergirte en las capas subyacentes del sistema operativo y el hardware. Usarlos te permite aprender más sobre el entorno en el que se ejecuta tu código.

# datos de la plataforma subyacente, es decir, hardware, sistema operativo e
# información sobre la versión del intérprete.
from platform import platform,machine,processor,system,version,//
python_implementation, python_version_tuple


print(platform())
print(platform(1))
print(platform(0, 1))

# nombre genérico del procesador que ejecuta el sistema operativo
print(machine())

#nombre real del procesador si es posible
print(processor())

# nombre genérico del sistema operativo en una cadena. (Linux, Darwin, Windows)
print(system())

# Versión del sistema operativo "#147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022"
print(version())

print(python_implementation())

for atr in python_version_tuple():
    print(atr)

Módulos de la Biblioteca Estándar

https://docs.python.org/3/py-modindex.html

Paquetes

Un módulo es un contenedor lleno de funciones - puedes empaquetar tantas funciones como desees en un módulo y distribuirlo por todo el mundo.

Crear muchos módulos puede causar desorden: mas tarde que temprano querrás agrupar tus módulos de la misma manera que previamente has agrupado funciones: Existe un contenedor más general que un módulo llamado paquete. Un paquete juega un papel similar al de una carpeta o directorio en el mundo de los archivos.

Mientras que un módulo está diseñado para acoplar algunas entidades relacionadas como funciones, variables o constantes, un paquete es un contenedor que permite el acoplamiento de varios módulos relacionados bajo un mismo nombre. Dicho contenedor se puede distribuir tal cual (como un lote de archivos implementados en un subárbol de directorio) o se puede empaquetar dentro de un archivo zip.

Durante la primera importación del módulo, Python traduce su código fuente a un formato semi-compilado almacenado dentro de los archivos pyc y los implementa en el directorio pycache ubicado en el directorio de inicio del módulo.

Si deseas decirle al usuario del módulo que una entidad en particular debe tratarse como privada (es decir, no debe usarse explícitamente fuera del módulo), puedes marcar su nombre con el prefijo _ o __. No olvides que esto es solo una recomendación, no una orden.

Los nombres shabang, shebang, hasbang, poundbang y hashpling describen el dígrafo escrito como #!, se utiliza para instruir a los sistemas operativos similares a Unix sobre cómo se debe iniciar el archivo fuente de Python. Esta convención no tiene efecto en MS Windows.

Si deseas convencer a Python de que debe tomar en cuenta el directorio de un paquete no estándar, su nombre debe insertarse/agregarse en/a la lista de directorios de importación almacenada en la variable path contenida en el módulo sys.

Un archivo de Python llamado init.py se ejecuta implícitamente cuando un paquete que lo contiene está sujeto a importación y se utiliza para inicializar un paquete y/o sus subpaquetes (si los hay). El archivo puede estar vacío, pero no debe faltar.

pip (administrador de paquetes)

pip es un sistema de gestión de paquetes utilizado para instalar y administrar paquetes de software escritos en Python. Python 2.7.9 y posteriores y Python 3.4 y posteriores incluyen pip por defecto.

El repositorio PyPi (Python Package Index) es el más importante

https://pypi.org/

Para la instalación en linux lo mejor es usar el propio paquete del sistema operativo que estemos usando.

Se ejecuta con pip (o pip3) dependiendo del sistema

pip --version
pip help
pip help install
pip list
pip show nombre_del_paquete
pip show pip
pip search (da problemas a fecha 23/10/2022)

ERROR: XMLRPC request failed [code: -32500]
RuntimeError: PyPI's XMLRPC API is currently disabled due to unmanageable load and will be deprecated in the near future. See https://status.python.org/ for more information.

Puedes realizar búsquedas mediante el interfaz web en

https://pypi.org/search/

Instalar paquetes

pip install --user pygame
pip show pygame
pip list

Desinstalar paquetes

pip uninstall nombre_del_paquete

Dependencias

la dependencia es un fenómeno que aparece cada vez que vas a utilizar un software que depende de otro software. Ten en cuenta que la dependencia puede incluir (y generalmente incluye) más de un nivel de desarrollo de software.


Última actualización: 2022-10-30