Python en Español

Aprende cómo importar, crear, instalar y volver a cargar los módulos de Python

Python incluye muchos módulos, podemos decir que hay módulos de Python para casi todo lo que necesites.

Necesitas trabajar con robots o algún hardware en una nave espacial, encontrará un módulo de Python para eso.

En esta publicación, hablaremos acerca de los módulos de Python y cómo crearlos, instalarlos, actualizarlos, recargarlos y utilizarlos.

 

 

¿Qué son los módulos de Python?

El módulo en Python te permite organizar tu código Python y hacer que sea más fácil el mantenimiento más adelante.

Dentro de un módulo, puedes definir funciones, clases y variables.

Puedes enviar tu módulo a tus amigos y compartirlo con otros para que puedan usarl.

 

Módulos de biblioteca estándar

Python incluye una gran colección de módulos. Hay más de 200 módulos para tareas de programación comunes.

Estos módulos son llamados biblioteca estándar, puedes encontrarlos en la mayoría de las instalaciones en todas las plataformas.

Estos módulos se pueden usar importándolos utilizando la sentencia import, como hemos visto en la publicación anterior sobre los principios básicos de la programación en Python.

 

Cómo funciona la sentencia import

Algunos principiantes podrían pensar que la sentencia import funciona como la directiva include en lenguaje C o require de PHP, pero eso está muy lejos de ser verdad porque los otros lenguajes lo único que hace es simplemente capturar el contenido del archivo.

En Python, la situación es un poco diferente. Se realizan tres pasos la primera vez que un programa importa un archivo determinado.

  1. Encuentra el archivo del módulo.
  2. Compila el archivo en bytecode si es necesario.
  3. Construye los objetos del bytecode.

Escribes el archivo importado sin la extensión y sin su ruta de directorio completa.

Entonces Python lo compila en bytecode. Si el archivo fuente se modifica, el   archivo de bytecode (. archivo PYC) regenera automáticamente.

Al desplegar tus programas en Python solo como archivos bytecode y evitas enviar la fuente, harás que Python cargue los archivos de código de bytes.

El último paso de la operación de importación es ejecutar el bytecode generado.

 

Búsqueda de un módulo por Python

Como dijimos anteriormente, simplemente escribe el nombre del módulo sin extensión o ruta completa y Python se encargará del resto.

Entonces, ¿en dónde Python hace la búsqueda de los módulos?

  1. El directorio de inicio de tu programa.
  2. El directorio de variables de entorno PATH.
  3. Directorios de biblioteca estándar.
  4. Cualquier archivo .
  5. El sitio contiene paquetes de tus extensiones de terceros.

La combinación de estos elementos se convierte en la lista sys.path.

En realidad, sys.path es la ruta donde Python busca módulos.

Puedes obtener la ruta de la siguiente forma:

import sys

print(sys.path)

Puedes agregar nuevas rutas personalizadas para buscar módulos usando 

sys.path.insert

Cuando ingresas import mymodule, Python cargará cualquiera de los siguientes::

  • Archivo de código fuente llamado mymodule.py.
  • Archivo decódigo de bytes llamado pyc.
  • El archivo decódigo de bytes optimizado se llama pyo.
  • Un directorio llamadomymodule, para importar paquetes.
  • Módulo de extensión compilado como mymodule.so en Linux o mymodule.dll en Windows.
  • Módulo compilado que está escrito en C.
  • Archivo ZIP que se extrae automáticamente
  • Los archivos Jython que son Python para Java.
  • Componentes .NET, escrito en la versión IronPython de Python

Si tiene dos archivos diferentes como mymodule.py y mymodule.dll, Python cargará el primer archivo encontrado en la ruta de búsqueda durante la búsqueda de izquierda a derecha de sys.path . Pero, ¿y si Python encuentra ambos archivos en el mismo directorio?

Cualquiera de ellos puede cargarse primero, así que evita que esto suceda.

 

Creando un Módulo de Python

Para crear un módulo de Python, no se requiere nada especial, solo abre tu editor, escriba tu código y guarde tu archivo con extensión .py

Todas las funciones definidas del módulo se convierten en sus atributos.

Por ejemplo, si defines una función como la siguiente:

def myfunc:

    print("welcome")

Puedes llamar a la función myfunc al importar el módulo dentro de tu código.

Ten en cuenta que, al crear un módulo, el nombre del módulo se convierte en una variable (sin la extensión) dentro de tu programa Python, por lo que no puedes nombrar un módulo if.py. Siempre trata de evitar las palabras reservadas de Python.

Instalar módulos de Python desde la fuente

El módulo incluye un archivo especial llamado setup.py que maneja los detalles.

Puedes instalar los módulos de Python desde la fuente de esta manera:

$ python setup.py install

Este comando instalará el módulo dentro de la carpeta site-packages que podría ser así: C:\ Python27\lib\ site-packages

O así

C:\Users\LikeGeeks\AppData\Local\Programs\Python\Python36-32\lib\site-packages

 

Instalar módulos de Python usando pip

Puedes usar la utilidad pip para instalar módulos y paquetes desde el repositorio PyPI.

La mayoría de los desarrolladores prefieren instalar módulos utilizando este método. Lo mejor de pip es que maneja la comprobación de dependencias.

Puedes instalar módulos Python usando pip de la siguiente forma:

$ pip install numpy

Además, puedes actualizar tus módulos instalados usando pip también:

$ pip install --upgrade numpy

Este comando actualizará todas las dependencias de los módulos.

 

Importación de módulos

Después de escribir tus impresionantes módulos o instalarlos, ahora necesitas reutilizarlos en cualquier parte de tu código, o tal vez enviarlos a tus amigos para que puedan usarlos o compartirlos con otros en la web. ¿Cómo importas módulos en tu código?

Hay dos formas de lograrlo, la primera es usar la sentencia import, y la segunda es usar la sentencia from. Ambos encontrarán, compilarán y ejecutarán.

La principal diferencia es que la sentencia import trae todo el módulo, mientras que la instrucción from obtiene atributos específicos de los módulos.

import mymodule

from mymodule import myfunc

La sentencia import

Debido a que la sentencia import carga todos los atributos del módulo, si desea utilizar cualquier atributo, debes utilizar el nombre del módulo de la siguiente manera:

import mymodule

mymodule.myfunc()

La sentencia from

Como mencionamos anteriormente, la sentencia from carga solo atributos especificados.

Utilizar la sentencia from permite que escribamos menos debido a que no tienes que especificar el nombre completo del módulo cuando lo llamas.

from mymodule import myfunc

myfunc()

De hecho, en su interior, la sentencia from es una extensión de sentencia import, también se carga el archivo completo, pero se le proporcionarán todos los atributos directamente desde tu código.

Puedes escribir la sentencia de la siguiente manera:

from mymodule import *

El asterisco aquí significa importar todo el módulo.

 

El peligro de utilizar la sentencia From

Algunos desarrolladores de Python recomiendan usar siempre la sentencia import y evitar la from.

¿Pero esto es cierto? ¿La sentencia from no es segura?

Bueno, si utilizas el archivo from para importar variables, sobrescribirá cualquier variable que tenga el mismo nombre si existe sin previo aviso.

Este problema, por supuesto, no ocurre con la sentencia import. Debido a que escribe el nombre del módulo para poder obtener sus atributos, lo cual evita cualquier colisión.

Debes tener cuidado cuando utilizas la sentencia from. Considera la siguiente situación:

#module1

def myfunc:

    print("Hello from module 1")
#module2

def myfunc:

    print("Hello from module 2")

Ahora, importemos los módulos anteriores e intentemos usarlos

#MyCode

from module1 import myfunc

from module2 import myfunc

myfunc()

El resultado aquí será del módulo 2 ya que la función se sobrescribirá.

En realidad, esto no es algo común de encontrar, pero, de todos modos, hay una solución para eso.

 

Utilizar alias

Para evitar la colisión de nombres como en el ejemplo anterior, puedes utilizar un alias como el siguiente:

#MyCode

from module1 import myfunc as myfunc1

from module2 import myfunc as myfunc2

myfunc1()

myfunc2()

Es como cambiar el nombre de las importaciones. A veces los desarrolladores usan alias para acortar los nombres de los módulos que están importando cuando el nombre del módulo es muy grande.

Después de utilizar alias, ¿crees que utilizar las sentencia from es peligroso? Para mí, no lo es.

 

Alcance del módulo importado

Sabes que no podemos acceder a los atributos del módulo a menos que lo importemos.

Considera la siguiente situación

#module1

M = 10

def  myfunc():

    global M

    M = 20
#module2

M = 50

import module1

module1.myfunc()

print(M,module1.M)

Entonces al ejecutar el modulo2, module1.myfunc () cambia la variable M en el módulo 1 no la M en modulo2.

El resultado será   50 20.

Eso significa que el alcance global de module1.myfunc es el archivo que lo incluye, no el archivo desde el que se ejecuta.

Las sentencias de import no promueven la visibilidad de los atributos, y el archivo importado no puede ver los atributos en el archivo de importación.

Recargando Módulos

Si intentas volver a importar el módulo después de importarlo en la parte superior de su código, Python buscará el módulo ya cargado de nuevo.

Para volver a cargar un módulo, puede utilizar la función reload que puede lograrlo.

¿Por qué tenemos que volver a cargar un módulo importado?

La respuesta es simple, esto permite que algunas partes de su programa sean modificadas sin reiniciar su programa. Puedes imaginar cualquier situación que requiera personalización dinámica.

Python solo puede volver a cargar los módulos escritos en Python. Por lo tanto, las extensiones compiladas (como las discutidas anteriormente) no se pueden volver a cargar.

DEBES importar el módulo primero antes de cargarlo. Puede volver a cargar módulos de la siguiente forma:

import module1

module1.myfunc()

from importlib import reload

reload(module1)

module1.myfunc()

Puede cambiar el código del módulo1 en tu editor de texto y se volverá a cargar.

Recargar módulos es una característica muy poderosa en Python si se usa con cuidado.

Espero que encuentres la publicación útil e interesante. Vuelve pronto.

Gracias.

Mokhtar Ebrahim
Fundadora de LikeGeeks. Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja una respuesta

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