Crear e importar m贸dulos en Python

    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.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *