Crear e importar módulos en Python

C

Introducción

En Python, un módulo es un archivo autónomo con declaraciones y definiciones de Python. Por ejemplo, file.py, puede considerarse un módulo llamado file. Esto se diferencia de un paquete en que un paquete es una colección de módulos en directorios que dan estructura y jerarquía a los módulos.

Los módulos nos ayudan a dividir programas grandes en archivos pequeños que son más manejables. Con los módulos, la reutilización del código se convierte en una realidad. Supongamos que tenemos una función que se usa con frecuencia en diferentes programas. Podemos definir esta función en un módulo y luego importarla a los distintos programas sin tener que copiar su código cada vez.

En este artículo, veremos cómo crear módulos Python y cómo usarlos en código Python.

Módulos de escritura

Un módulo es simplemente un archivo de Python con la .py extensión. El nombre del archivo se convierte en el nombre del módulo. Dentro del archivo, podemos tener definiciones e implementaciones de clases, variables o funciones. Estos se pueden usar en otros programas de Python.

Comencemos por crear una función que simplemente imprima “Hola mundo”. Para hacer esto, cree un nuevo archivo Python y guárdelo como hello.py. Agregue el siguiente código al archivo:

def my_function():
    print("Hello World")

Si ejecuta el código anterior, no devolverá nada. Esto se debe a que no le hemos dicho al programa que haga nada. Es cierto que hemos creado una función llamada my_function() dentro del código, pero no hemos llamado ni invocado la función. Cuando se invoca, esta función debe imprimir el texto “Hola mundo”.

Ahora, muévase al mismo directorio donde guardó el archivo anterior y cree un nuevo archivo llamado main.py. Agregue el siguiente código al archivo:

import hello

hello.my_function()

Salida

Hello World

La función se invocó correctamente. Comenzamos importando el módulo. El nombre del archivo era hello.py, por lo tanto, el nombre del módulo importado es hello.

Además, tenga en cuenta la sintaxis que hemos utilizado para invocar la función. Esto se denomina “notación de puntos”, que nos permite llamar a la función especificando primero el nombre del módulo y luego el nombre de la función.

Sin embargo, esa es solo una forma de importar el módulo e invocar la función. Podríamos haberlo hecho de la siguiente manera:

from hello import my_function

my_function()

Salida

Hello World

En el ejemplo anterior, la primera línea ordena al intérprete de Python que importe una función llamada my_function de un módulo llamado hello. En tal caso, no tiene que usar la notación de puntos para acceder a la función, simplemente puede llamarla directamente.

Sin embargo, en el caso donde nuestro hello módulo tiene múltiples funciones, la declaración from hello import my_function no importará todo hellofunciones en nuestro programa, solo my_function. Si intenta acceder a cualquier otra función, se generará un error. Tiene que importar todo el módulo o importar cada función individual para poder usarlas.

Podemos definir una variable dentro de un módulo, que luego puede ser utilizada por otros módulos. Para demostrar esto, abra el archivo hello.py y agregue el siguiente código:

def my_function():
    print("Hello World")

# The variable that'll be used in other modules
name = "Nicholas"

Ahora, abre el main.py archivo y modificarlo de la siguiente manera:

import hello

hello.my_function()

print(hello.name)

Salida

Hello World
Nicholas

Hemos invocado con éxito tanto la función como la variable definida en el módulo, ya que importamos todo el módulo en lugar de solo el my_function() función.

Dijimos anteriormente que podemos definir una clase dentro de un módulo. Veamos cómo hacer esto en el siguiente ejemplo. Abre el hello.py archivo y modificarlo de la siguiente manera:

def my_function():
    print("Hello World")

# Defining our variable
name = "Nicholas"

# Defining a class
class Student:
    def __init__(self, name, course):
        self.course = course
        self.name = name

    def get_student_details(self):
        print("Your name is " + self.name + ".")
        print("You are studying " + self.course)

Aquí hemos definido una clase llamada Student. Se han definido dos variables en esta clase, name y course. El método get_student_details() También se ha definido dentro de este, que imprime los datos del alumno en la consola.

Ahora, abre el archivo main.py y modificarlo de la siguiente manera:

import hello

hello.my_function()

print(hello.name)

nicholas = hello.Student("Nicholas", "Computer Science")
nicholas.get_student_details()

Salida

Hello World
Nicholas
Your name is Nicholas.
You are studying Computer Science

En el script anterior, nuevamente usamos la notación de puntos para crear un objeto de la student clase de la hello módulo. Luego usamos el get_student_details() función para obtener los detalles del estudiante.

Aunque los módulos consisten principalmente en definiciones de clases (en la mayoría de los casos), también es posible que ejecuten su propio código cuando se importan. Para demostrar esto, modifiquemos el hello.py archivo, donde tenemos una definición de la función my_function(), junto con la llamada a la función:

def my_function():
    print("Hello World")
    
my_function()

Ahora, abre el archivo main.py y borre todas las líneas excepto las siguientes:

import hello

Salida

Hello World

La salida anterior muestra que definimos y llamamos a la función dentro del módulo. Cuando se importa el módulo, devuelve directamente el resultado de la función sin tener que invocar la función. Este comportamiento no siempre se desea, pero es útil para ciertos casos de uso, como la carga previa de datos desde la caché cuando se importa el módulo.

Importar todos los objetos del módulo

Para importar todos los objetos (funciones, variables, clases, etc.) de un módulo, podemos usar el import * declaración. Por ejemplo, para importar todos los objetos contenidos en el hello módulo, podemos usar la siguiente declaración:

from hello import *

Después de agregar la declaración anterior a un programa, podremos usar cualquier función, variable o clase contenida en el hello módulo sin tener que anteponerlo con hello.

Acceder a un módulo desde otra ruta

En Python, los módulos se utilizan en más de un proyecto. Por lo tanto, no tiene sentido si mantiene sus módulos en el directorio de uno de los proyectos, ya que otros proyectos no podrían usarlo tan fácilmente.

Tiene un par de opciones siempre que necesite acceder a un módulo que no está almacenado en el mismo directorio que su programa. Analicemos estos en las siguientes secciones:

Agregar rutas

Para importar un módulo desde otra ruta, primero debe importar el sys module así como cualquier otro módulo de Python que le gustaría usar en su programa.

los sys El módulo es proporcionado por la biblioteca estándar de Python y proporciona funciones y parámetros que son específicos del sistema. los path.append() función de la sys El módulo se puede utilizar para agregar la ruta del módulo al proyecto actual.

Para demostrar esto, corte el hello.py archivo del directorio donde tiene el archivo main.py. Péguelo en otro directorio. En mi caso, lo he pegado en el directorio “F: Python”.

Ahora, abre el archivo main.py, importar el sys módulo y especifique la ruta en la que el intérprete de Python buscará archivos. Esto se demuestra a continuación:

import sys
sys.path.append('F:/Python/')

import hello

Salida

Hello World

En el guión anterior, la línea sys.path.append('F:/Python/') le dice al intérprete de Python que incluya esta ruta en la lista de rutas que se buscarán al importar los módulos.

Agregar un módulo a la ruta de Python

El método anterior funciona solo si importa el sys módulo. Si no importa el sys module y especifique la ruta al módulo, se generará un error. Para que el módulo esté disponible para todo el sistema, puede agregarlo a la ruta donde Python normalmente busca módulos y paquetes. De esta forma, no tendrá que importar el sys module y especifique la ruta al módulo como hemos hecho en la sección anterior.

Antes de hacer cualquier otra cosa, primero debe identificar la ruta en la que Python busca módulos y paquetes. Simplemente abra la línea de comando de su sistema operativo y ejecute el python mando. Esto lo llevará a la terminal de Python.

Importar el sys módulo de la siguiente manera:

import sys

Luego puede ejecutar el siguiente comando para imprimir la ruta:

print(sys.path)

La salida contendrá al menos una ruta del sistema. Si lo hace desde un entorno de programación, obtendrá varias rutas. En mi caso, obtuve lo siguiente:

$ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/Library/Python/2.7/site-packages/six-1.10.0-py2.7.egg', '/Library/Python/2.7/site-packages/cffi-1.2.1-py2.7-macosx-10.9-intel.egg', '/Library/Python/2.7/site-packages/pycparser-2.14-py2.7.egg', '/Library/Python/2.7/site-packages/virtualenv-13.1.2-py2.7.egg', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/Library/Python/2.7/site-packages']
>>> 

Su objetivo debe ser encontrar uno en el entorno que está utilizando actualmente. Debería buscar algo como lo siguiente:

/Library/Python/2.7/site-packages

Mueve tu hello.py archivo a la ruta. Después de eso, podrá importar el hello módulo desde cualquier directorio de la forma habitual, como se muestra a continuación:

import hello

Salida

Hello World

Conclusión

Esto marca el final de este artículo. Un módulo es simplemente un archivo de Python con un conjunto de variables y definiciones de funciones. Un módulo facilita la reutilización del código, ya que puede definir una función en un módulo e invocarla desde diferentes programas en lugar de tener que definir la función en cada programa. Aunque un módulo se usa principalmente para definiciones de funciones y clases, también puede exportar variables e instancias de clases.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad