No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Paquetes

29/44
Recursos

Aportes 63

Preguntas 17

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Podemos importar todo un módulo de un paquete y nombrándolo con la palabara clave as

# mod_2.py
import package.mod_2 as mod_2

print(mod_2.func_3())
print(mod_2.func_4())

.
También podemos usar los paquetes desntro de un módulo que está en el mismo paquete

# mod_3.py
from .mod_1 import func_1
from . import mod_2

def func_5():
    return func_1()

def func_6():
    return mod_2.func_3()

.
Este último es muy común usarlo en framework como django, flask entre otros.

PAQUETES
Los paquetes son las carpetas que contienen varios módulos y cada uno con una función distinta.

Para ello debe tener siempre un archivo de nombre __init__.py (por lo general esta vacio, ya que así es compatible con programas python versiones anteriores a la 3), con esto le estamos indicado a python que esto se trata de un paquete y no de una carpeta.

Para acceder a los módulos de los paquetes podemos utilizar estas opciones:
import nombrecarpeta.nombremodulo
from nombrecarpeta import nombremodulo
from nombrecarpeta.nombremodulo import def

Estos son algunos ejemplos:

Antes de realizar el ejemplo debemos tener nuestra carpeta definida con la siguiente estructura:

En nuestra carpeta pkg, creamos dos archivos: __init__.py y aritmetica.py

__init__.py Se utiliza cuando debemos utilizar paquetes en versiones anteriores a python 3 o puede contener información la cual se ejecutara siempre, para este caso le colocamos el titulo Bienvenido a la clase de Aritmetica.

aritmetica.py va a contener nuestras operaciones aritmeticas que son, suma, resta, multiplicacion y division:

def sumar(a, b):
    return a + b

def restar(a, b):
    return a - b

def mult(a, b):
    return a * b

def div(a, b):
    return a / b

Ahora en nuestro archivo principal main.py ejecutaremos los paquetes de la siguiente manera:

import nombrecarpeta.nombremodulo

import pkg.aritmetica
print(pkg.aritmetica.sumar(5,7))
print(pkg.aritmetica.restar(5,7))

Produccion:

Bienvenido a la clase de Aritmética
12
-2

from nombrecarpeta import nombremodulo

from pkg import aritmetica 
print(aritmetica.sumar(5,7))
print(aritmetica.restar(5,7))

Produccion:

Bienvenido a la clase de Aritmética
12
-2

from nombrecarpeta.nombremodulo import def

from pkg.aritmetica import sumar
print(sumar(5,7))
from pkg.aritmetica import restar
print(restar(5,7))

Produccion:

Bienvenido a la clase de Aritmética
12
-2

Esta clase fue muy reveladora, por fin entendí para que se utiliza el init.py

Un paquete en Python es una carpeta que contiene varios módulos.

Para importar paquetes módulos en su interior tenemos diversos módulos, entre los que se pueden listar:

  • import packageName
  • import packageName.moduleName
  • from packageName import moduleName
  • from packageName.moduleName import functionName

Ahora bien, Python maneja los paquetes de 2 formas diferentes:

  • Versión 3.2 y anteriores

    Los paquetes para estas versiones requieren el archivo __init__.py, este es un archivo especial empleado para indicar que el directorio debe ser tratado como un paquete. Usualmente este archivo está vacío, pero puede ser usado para configurar el paquete y definir la variable __all__ (precisa que variables son importadas cuando el módulo lo hace, el resto de variables arrojarán un error - fuente -).

    Como se ha mencionado, el archivo __init__.py no necesita contenido puesto que solo se usa para inicializar el paquete cuando se importa.

  • Versión 3.3 y superiores

    Los paquetes de las versiones más recientes no requieren el archivo __init__.py debido al módulo importlib, el cual es el núcleo de todo en sistema de importación; gracias al mismo los paquetes se identifican ahora automáticamente. Sin embargo, el archivo __init__.py ofrece diversas funcionalidades por las que se puede seguir usando, entre ellas:

    • Configurar el paquete cuando se importa, por ejemplo, al definir variables o realizar ciertas tareas de inicialización.
    • Definir la variable __all__ ya mencionada.
    • Definir sub-módulos y sub-paquetes.
    • Definir el API del paquete, que es el conjunto de funciones, clases y símbolos que se orientan al uso público.
    • Habilitar un namespace.

Namespace

Un namespace es un sistema que tiene un nombre único para cada objeto en Python.

Es posible habilitar un namespace a través del archivo __init__.py si los módulos de dicho paquete se importan en el mismo:

  • Archivo __init__.py
import pkg.mod_1
  • Archivo mod_1.py
def func_1():
  return 'func 1'
  
def func_2():
  return 'func 2'
  • Respuesta sin __init__.py
import pkg

print(pkg.mod_1.func_1()) # AttributeError: module 'pkg' has no attribute 'mod_1'
  • Respuesta con __init__.py
import pkg

print(pkg.mod_1.func_1()) # func 1

Así pues, la función importada posee un nombre único a partir de su paquete.

💡 Más información puede ser hallada aquí:

¿Quién más quiere un curso de POO en Python? 🙌

Muy bueno ver esos ejemplos con desarrollos mas profesionales para ir evaluando hasta donde se puede llegar.

Ojo con Reptil...no me funcionaba main hasta que ingrese`__init__.py` a la carpeta pkg

pkg/mod_1

def func_1():
  return "func 1"

def func_2():
  return "func 2"

pkg/mod_2

def func_3():
  return "func 3"

def func_4():
  return "func 4"

pkg/init

# Paquetes
# https://github.com/tiangolo
# https://github.com/tiangolo/full-stack-fastapi-postgresql

'''
Antes de la version 3.3 de Python, este archivo se usaba para declarar los paquetes.
De la 3.3 en adelante se usa solo para inicializar alguna variable o importaciones a paquetes.
'''

print("Se inicio paquete")

# Cada vez que llame el paquete, inmediatamente se va a crear e inicializar esta variable
URL = "platzi.com"

'''
Este archivo tambien puede ser usado para definir un namespace
'''

import pkg.mod_1, pkg.mod_2

main

# El Zen de Python
# import this

'''
from pkg.mod_1 import func_1, func_2
from pkg.mod_2 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())
'''

import pkg
print(pkg.URL)
print(pkg.mod_1.func_1())

“Parte del código que usaras en tu vida profesional” :’) gracias, Nicolas, me motivas.

Creo q muchos aquí a estas alturas estamos usando una versión de Python bastante actualizada en replit y aún así no nos importaba el paquete hasta q creamos el archivo init.py

Les recomiendo seguir a Sebastián Ramírez en sus redes sociales, ¡vale la pena leer lo que escribe!

Excelente, no conocía la segunda forma!

Inicializar variables en un paquete con el archivo init

  1. Creamos el archivo init en la carpeta del paquete
  1. Agregamos definiciones de prueba en el archivo init
#__init__.py
print('Se inicio paquete')
URL = 'platzi.com'
  1. Al correr el archivo main, el sistema busca primero el archivo init y corre lo que esta dentro, luego corre los que esta en el archivo main
>>> python main.py
--> Se inicio paquete
		func 1
		func 2
		func 3
		func 4
  1. Podemos utilizar alguna variable de init en main al importar todo el paquete
# main.py
from pkg.mod_01 import func_1, func_2
from pkg.mod_02 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())

import pkg
print(pkg.URL)
>>> python main.py
--> Se inicio paquete
		func 1
		func 2
		func 3
		func 4
		platzi.com

Excelente que hayan tenido en cuenta explicar que son los paquetes, en los cursos anteriores no lo hacían.

Podrían actualizar los enlaces de los recursos, ya no aparece la carpeta Cookiecutter.

Una de las maneras mas ordenadas es importar el modulo

from pkg import mod_1, mod_2

print(mod_1.func_1())
print(mod_1.func_2())

print(mod_2.func_3())
print(mod_2.func_4())

Packages en Python

  • Los paquetes son una forma de organizar módulos relacionados.
  • Un paquete es simplemente un directorio que contiene un archivo especial llamado i n i t . p y (o init) y otros módulos y subpaquetes relacionados.
  • Para trabajar con un paquete en Python, se puede importar un módulo específico dentro del paquete usando la sintaxis import p a c k a g e . m o d u l e.
  • Se puede importar todo el paquete usando la sintaxis import package.
  • Se puede usar el código en los módulos importados para realizar tareas específicas en el proyecto.

Excelente curso y clase 🤩 aprendido mucho que bueno. Y Hasta nos enseña un perfil pro y su trabajo genial.

En Python, los paquetes son una forma de organizar y estructurar nuestro código en módulos relacionados. Un paquete es simplemente una carpeta que contiene uno o más módulos de Python y un archivo especial llamado “init” Este archivo le dice a Python que la carpeta es un paquete y puede contener otros paquetes y módulos.

Los paquetes nos permiten dividir nuestro código en piezas más pequeñas y manejables, lo que hace que sea más fácil de mantener y compartir con otros desarrolladores. Por ejemplo, si estás trabajando en un proyecto de análisis de datos, puedes tener un paquete para cargar y limpiar datos, otro para realizar análisis estadísticos y otro para visualizar los resultados.

Siempre había puesto el init.py pero no sabia de las versiones.

Inicializar importaciones con el archivo init

El archivo init tambien sirve para definir los espacios de nombre de manera que pueda utilizarse en el archivo main de forma reducida.

  1. Al llamar una funcion desde su modulo y paquete como sigue, se genera un error debido a que no se esta haciendo una importacion explicita de los modulos
# main.py
import pkg

# llamado de una funcion desde el modulo y el paquete
print(pkg.mod_01.func_2())
--> ERROR
  1. para solucionarlo, debemos inicializar la importacion de los modulos en el archivo init como sigue
# __init__.py
print('Se inicio paquete')
URL = 'platzi.com'
import pkg.mod_01, pkg.mod_02
  1. De esta manera, el archivo main podra ejecutarse sin errores utilizando los name space
# main.py
import pkg

# llamado de una funcion desde el modulo y el paquete
print(pkg.mod_01.func_2())
--> Se inicio paquete
		func 2
Fue una buena intro para paquetes, no sabia, que era eso, gracias Nico.
Gente tengo la version de python 3.12.3 pero en VSC no me funcionan los paquetes al menos que tenga **init** saben porque ?
no me funciono el nómbre de paquete "pkg" le cambie el nombre y solucion
Ok, este tema , se me hizo enredado pero espero que con el playground quede más claro, me encanta que este curso tiene mucho de ellos.
**El archivo \_\_init\_\_.py** en Python tiene diferentes usos dependiendo de la versión de Python que estés utilizando. **Antes de Python 3.3,** el archivo \_\_init\_\_.py era necesario para que Python reconociera un directorio como un paquete de Python. Este archivo podía estar vacío o contener código de inicialización para el paquete. Por ejemplo, podría importar submódulos específicos. **A partir de Python 3.3**, con la introducción de los paquetes de espacio de nombres (PEP 420), ya no es necesario tener un archivo \_\_init\_\_.py para que un directorio sea reconocido como un paquete. Sin embargo, el archivo \_\_init\_\_.py todavía se puede utilizar para ejecutar código de inicialización para el paquete o para definir variables que son accesibles a nivel de paquete.
Is really amazing know better how works this file **\_\_init\_\_.py** thanks a lot!
valió cada maldito segundo, de 20 la clase

Hola, yo soy científico de datos certificado, tengo 1 año de experiencia, me parece que hay muchas cosas de este curso que no son necesarios, sirven para aprender pero no sirven, cómo esta clase por ejemplo

Me ha encantado esta clase
nix error: building nix env: exit status 1 Output has been trimmed to the last 20 lines … from call site at /nix/store/4va5hjb3sdk8pnpn3dsnkdg65fw28jgv-nixpkgs-23.05-src/lib/trivial.nix:430:7: 429| { # TODO: Should we add call-time "type" checking like built in? 430| \_\_functor = self: f; | ^ 431| \_\_functionArgs = args; (stack trace truncated; use '--show-trace' to show the full trace) error: syntax error, unexpected '-' at /home/runner/Python-101/replit.nix:3:17: 2| deps = \[ 3| pkgs.python --version | ^ 4| ]; Se inicio paquete func 1 func 2 func 3 func 4 platzi.com a mi me sale todoooo esto
Una pregunta, aparece un error el cual aparece de la siguiente manera, podría alguien ayudarme nix error: building nix env: exit status 1 Output has been trimmed to the last 20 lines … from call site at /nix/store/4va5hjb3sdk8pnpn3dsnkdg65fw28jgv-nixpkgs-23.05-src/lib/trivial.nix:430:7: 429| { # TODO: Should we add call-time "type" checking like built in? 430| \_\_functor = self: f; | ^ 431| \_\_functionArgs = args; (stack trace truncated; use '--show-trace' to show the full trace) error: syntax error, unexpected '{', expecting ID or OR\_KW or DOLLAR\_CURLY or '"' at /home/runner/Python-2/replit.nix:3:14: 2| deps = \[ 3| pkgs. { | ^ 4| ];
Alguno me puede aclarar como ejecutar un archivo cuando esta dentro de una carpeta por si solo?
Si Replit no recoce la carpeta pkg cámbienle el nombre a package

Me gusto esta clase con respecto a los paquetes. Aprendi mucho con respecto al uso de estos y como nos puede ayudar a ser mejores.

Solución al error en replit:

>  python3 main.py
  Traceback (most recent call last):
  File "/home/runner/Python-102/main.py", 
  line 13, in <module> print(pkg.URL)
   AttributeError: module 'pkg' has no attribute 'URL'
  exit status 1
.

es porque la version de python es inferior:
Files pyproject.toml version.
.

.

.

solución: crear el archivo “init.py” en el directorioo pkg

![](https://static.platzi.com/media/user_upload/Screen%20Shot%202023-10-13%20at%2011.54.32%20AM-45f9e986-b7a9-43ca-a1ae-a13d95e7ca53.jpg)No entiendo si estoy corriendo la 3.11 - En teoria el codigo deberia ser capaz de llamar a la variable global que declare en **init**, ayuda para entender esto

En Python, un paquete es una forma de organizar y estructurar múltiples módulos relacionados en un directorio jerárquico. Los paquetes son útiles cuando tienes un conjunto de módulos que están relacionados entre sí y deseas mantenerlos organizados de manera lógica en tu proyecto. Aquí hay algunas características clave de los paquetes en Python:

  1. Directorio Especial: Para crear un paquete, debes crear un directorio especial en tu proyecto. Este directorio debe contener un archivo especial llamado __init__.py. Este archivo puede estar vacío, pero es necesario para que Python reconozca el directorio como un paquete.

  2. Estructura Jerárquica: Los paquetes pueden contener subpaquetes y módulos relacionados en una estructura jerárquica. Esto te permite organizar tu código de manera más lógica. Por ejemplo, puedes tener un paquete llamado utilidades que contenga subpaquetes como matematicas y cadena, cada uno con sus propios módulos.

  3. Importación de Paquetes: Puedes importar módulos de un paquete utilizando la notación de punto. Por ejemplo, si tienes un paquete llamado utilidades con un módulo llamado matematicas, puedes importarlo de la siguiente manera:

    pythonCopy code
    from utilidades import matematicas
    
    
  4. Alias de Paquetes: Puedes asignar alias a los paquetes para hacer más corta la notación de punto al importar. Por ejemplo:

    pythonCopy code
    import utilidades.matematicas as math
    
    
  5. __init__.py: El archivo __init__.py puede contener código de inicialización para el paquete. Este código se ejecutará cuando se importe el paquete. Esto es útil para realizar configuraciones iniciales o definir variables globales para el paquete.

  6. Utilidad para Proyectos Grandes: Los paquetes son especialmente útiles en proyectos grandes y complejos, ya que ayudan a mantener el código organizado y modular. También facilitan la reutilización de código, ya que puedes importar fácilmente módulos desde otros paquetes en tu proyecto.

  7. Ejemplo: Aquí hay una estructura de paquetes de ejemplo:

    markdownCopy code
    proyecto/
    ├── __init__.py
    ├── main.py
    ├── utilidades/
    │   ├── __init__.py
    │   ├── matematicas.py
    │   └── cadena.py
    └── datos/
        ├── __init__.py
        ├── cargar.py
        └── guardar.py
    
    

En Python, un paquete es una forma de organizar y estructurar múltiples módulos relacionados en un directorio jerárquico. Los paquetes son útiles cuando tienes un conjunto de módulos que están relacionados entre sí y deseas mantenerlos organizados de manera lógica en tu proyecto. Aquí hay algunas características clave de los paquetes en Python:

  1. Directorio Especial: Para crear un paquete, debes crear un directorio especial en tu proyecto. Este directorio debe contener un archivo especial llamado __init__.py. Este archivo puede estar vacío, pero es necesario para que Python reconozca el directorio como un paquete.

  2. Estructura Jerárquica: Los paquetes pueden contener subpaquetes y módulos relacionados en una estructura jerárquica. Esto te permite organizar tu código de manera más lógica. Por ejemplo, puedes tener un paquete llamado utilidades que contenga subpaquetes como matematicas y cadena, cada uno con sus propios módulos.

  3. Importación de Paquetes: Puedes importar módulos de un paquete utilizando la notación de punto. Por ejemplo, si tienes un paquete llamado utilidades con un módulo llamado matematicas, puedes importarlo de la siguiente manera:

    pythonCopy code
    from utilidades import matematicas
    
    
  4. Alias de Paquetes: Puedes asignar alias a los paquetes para hacer más corta la notación de punto al importar. Por ejemplo:

    pythonCopy code
    import utilidades.matematicas as math
    
    
  5. __init__.py: El archivo __init__.py puede contener código de inicialización para el paquete. Este código se ejecutará cuando se importe el paquete. Esto es útil para realizar configuraciones iniciales o definir variables globales para el paquete.

  6. Utilidad para Proyectos Grandes: Los paquetes son especialmente útiles en proyectos grandes y complejos, ya que ayudan a mantener el código organizado y modular. También facilitan la reutilización de código, ya que puedes importar fácilmente módulos desde otros paquetes en tu proyecto.

  7. Ejemplo: Aquí hay una estructura de paquetes de ejemplo:

    markdownCopy code
    proyecto/
    ├── __init__.py
    ├── main.py
    ├── utilidades/
    │   ├── __init__.py
    │   ├── matematicas.py
    │   └── cadena.py
    └── datos/
        ├── __init__.py
        ├── cargar.py
        └── guardar.py
    
    

En resumen, los paquetes en Python son una forma efectiva de organizar y estructurar tu código en proyectos más grandes. Ayudan a mantener la claridad y la modularidad de tu código al agrupar módulos relacionados en directorios jerárquicos.

import main

main.ejecutar()

print (main.data)

Por si os ha pasado, que a mi sí y casi me vuelvo loco, que os dice que no existe el modulo “pkg”, solo crear dentro el file de “init.py” y correrá sin problema alguno.

Suerte compañeros!

Me gustó mucho como se manejan los paquetes

Excelente clase!!

si se hace asi:

from pkg.mod_1 import *

se importa todo no solo una funcion

Le pedí a Bing una analogía de namespace con minecraft, aquí el resultado:

Según la documentación de Python hay dos tipo de paquetes: regular packages y namespaces packages. Estos últimos se introdujeron en la versión 3.3. La diferencia entre ellos es la manera de organizar y distribuir los módulos. Los namespaces packages permiten tener módulos en diferentes ubicaciones; los regular packages, no. Al tener todo en una solo ubicación, los regular packages permiten entender y visualizar cómo se organizan los módulos y cómo se relacionan entre sí de una manera más sencilla.

# Paquete = carpeta con varios modulos
'''
from pkg.mod_1 import func_1, func_2
from pkg.mod_2 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())
'''

import pkg
print(pkg.URL)
print(pkg.mod_1.func_1())

print('Se inicio paquete')

URL = 'platzi.com'

import pkg.mod_1, pkg.mod_2

Me doy cuenta de como a pesar de que casi termine con todo lo que hay que ver respecto a Javascript en platzi, excepto por los frameworks y las pruebas, hay muchos conceptos que en las rutas de JavaScript no se enseñan o indagan de manera correcta, simplemente se obvia que existen, y aquí si veo el como se toma el pequeño momento de explicar esos conceptos, si bien no se explican de manera técnica si lo suficiente como para comprender y utilizar, son conceptos que si bien pueden a llegar a cambiar en nombre son prácticamente iguales en varios lenguajes.
THX

Buenos días. Me gustaría dejar un aporte para nada trivial, para aquellos que estén haciendo los ejercicios en VSC, o en Anaconda por ejemplo.

En cualquiera de los dos casos, antes de poder usar un package van a tener que instalar el mismo. En el caso de VSC directo lo van a tener que hacer así:

$ pip install {package_name}/{package_route}

Si usamos package_name o package_route va a depender de si el paquete está subido a un repo o es local. En el primer caso es package_name. En el segundo caso en package_route.

Tengan en cuenta que si instalan el package en Anaconda, en un ambiente, y luego quieren reutilizar el mismo en otro proyecto van a tener que volver a instalarlo.

Para ver si el paquete está instalado y puede ser utilizado pueden usar el comando:

$ pip show {package_name}/{package_route}

Espero sea de utilidad.

Saludos,
Marian.

Me queda muy claro el uso de init.p, excelente clase.

CONCLUSION
Lo que hace init.py es “convertir” un directorio en un modulo (paquete) que contiene otros módulos, y esto lo hace para poder importarlos.

init_py:

print('se inicio paquete')

URL = 'platzi.com'

main_py sin init

from pkg.mod_1 import func_1, func_2
from pkg.mod_2 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())

mod_2.py:

def func_3():
    return 'func 3'

def func_4():
    return 'func 4'

mod_1.py

def func_1():
    return 'func 1'

def func_2():
    return 'func 2'

al usar from .item hace referencia a un “salto” hacia atras para buscar la carpeta item

Tambien pudimos haber configurado los archivos de esta manera:

init

main

Y nos daría la siguiente salida:

Es por eso que con frecuencia veremos los archivos init vacios.

Muy buena clase, te abre la mente a nuevas posibilidades

Sabía que se podía importar archivos desde el init. py (dunder init), por trabajar con cookiecutters para django pero esta explicación me ha encantado 👌 11/10, me alegra volver a tomar estos cursos y aprender algo nuevo.

Los namespace son una gran idea… tengamos más de esos.

'''
from pkg.mod_1 import func_1, func_2
from pkg.mod_2 import func_3, func_4

print(func_1())
print(func_2())
print(func_3())
print(func_4())
'''

import pkg
print(pkg.URL)
print(pkg.mod_1.func_1())
def cuadrado(n):
	return(n**2)
def cubo(n):
	return(n**3)
if __name__ == "__main__":
	print(cuadrado(3))
	print(cubo(3))
Si la consola te manda este error: `Traceback (most recent call last):` ` File "/home/runner/python-2-platzi-102/main.py", line 1, in <module>` ` from pkg.mod_1 import func_1, func_2` `ModuleNotFoundError: No module named 'pkg.mod_1'` Tienes que agregar un archivo vacio en la carpeta pkg con el nombre: `__init__.py` Dice chatgpt que su presencia convierte la carpeta en un paquete de Python, lo que permite que sus módulos sean importados. ![](https://static.platzi.com/media/user_upload/image-38f13612-261b-456a-9a55-38c043404ed1.jpg)
No puedo importar pkg.mod\_1 me dice 'Import "pkg.mod\_1" could not be resolved' en el editor y 'No module named 'pkg.mod\_1' en la consola. Tanto la carpeta como los archivos si existen. ![](https://static.platzi.com/media/user_upload/image-0f6c1ae0-d788-45a2-8366-bf7dcbe606d8.jpg)