Resolver ModuleNotFoundError en Python

Olorunfemi Akinlua 21 junio 2023
  1. Utilice el nombre de módulo correcto para resolver ModuleNotFoundError en Python
  2. Use la sintaxis correcta para resolver ModuleNotFoundError en Python
Resolver ModuleNotFoundError en Python

Los módulos son importantes para desarrollar programas Python. Con los módulos, podemos separar diferentes partes de un código base para una gestión más sencilla.

Cuando se trabaja con módulos, es importante comprender cómo funcionan y cómo podemos importarlos a nuestro código. Sin esta comprensión o errores, podemos experimentar diferentes errores.

Un ejemplo de tal error es ModuleNotFoundError. En este artículo, discutiremos la forma de resolver ModuleNotFoundError dentro de Python.

Utilice el nombre de módulo correcto para resolver ModuleNotFoundError en Python

Vamos a crear una base de código de Python simple con dos archivos, index.py y file.py, donde importamos file.py en el archivo index.py. Ambos archivos están dentro del mismo directorio.

El archivo file.py contiene el siguiente código.

class Student:
    def __init__(self, firstName, lastName):
        self.firstName = firstName
        self.lastName = lastName

El archivo index.py contiene el siguiente código.

import fiIe

studentOne = fiIe.Student("Isaac", "Asimov")
print(studentOne.lastName)

Ahora, ejecutemos index.py. El resultado de la ejecución de nuestro código se encuentra a continuación.

Traceback (most recent call last):
  File "c:\Users\akinl\Documents\Python\index.py", line 1, in <module>
    import fiIe
ModuleNotFoundError: No module named 'fiIe'

Tenemos un ModuleNotFoundError. Si observa detenidamente, notará que la declaración de importación tiene un error tipográfico donde “archivo” se escribe como fiIe con la l reemplazada por una I mayúscula.

Por lo tanto, si usamos el nombre equivocado, nos puede lanzar un ModuleNotFoundError. Tenga cuidado al escribir los nombres de sus módulos.

Ahora, vamos a corregirlo y ejecutar nuestro código.

import file

studentOne = file.Student("Isaac", "Asimov")
print(studentOne.lastName)

La salida del código:

Asimov

Además, podríamos reescribir la instrucción importar usando la palabra clave from e importar solo la clase Student. Esto es útil para los casos en los que no queremos importar todas las funciones, clases y métodos presentes en el módulo.

from file import Student

studentOne = Student("Isaac", "Asimov")
print(studentOne.lastName)

Obtendremos el mismo resultado que la última vez.

Use la sintaxis correcta para resolver ModuleNotFoundError en Python

Podemos obtener un ModuleNotFoundError cuando usamos la sintaxis incorrecta al importar otro módulo, especialmente cuando trabajamos con módulos en un directorio separado.

Vamos a crear un código base más complejo usando el mismo código que en la última sección pero con algunas extensiones. Para crear este código base, necesitamos la estructura del proyecto a continuación.

Project/
	data/
		file.py
		welcome.py
	index.py

Con esta estructura tenemos un paquete de data que alberga los módulos archivo y bienvenida.

En el archivo file.py, tenemos el código a continuación.

class Student:
    def __init__(self, firstName, lastName):
        self.firstName = firstName
        self.lastName = lastName

En el welcome.py, tenemos el código a continuación.

def printWelcome(arg):
    return "Welcome to " + arg

El index.py contiene código que intenta importar archivo y bienvenida y utiliza la clase Estudiante y la función printBienvenida.

import data.welcome.printWelcome
import data.file.Student

welcome = printWelcome("Lagos")
studentOne = Student("Isaac", "Asimov")

print(welcome)
print(studentOne.firstName)

El resultado de ejecutar index.py:

Traceback (most recent call last):
  File "c:\Users\akinl\Documents\Python\index.py", line 1, in <module>
    import data.welcome.printWelcome
ModuleNotFoundError: No module named 'data.welcome.printWelcome'; 'data.welcome' is not a package

El código intentó importar la función printWelcome y la clase Student usando el operador punto directamente en lugar de usar la palabra clave from o __init__.py para enlace fácil para submódulos. Al hacer esto, tenemos un ModuleNotFoundError arrojado a nosotros.

Usemos la sintaxis de declaración de importación correcta para evitar ModuleNotFoundError e importar la función y la clase directamente.

from data.file import Student
from data.welcome import printWelcome

welcome = printWelcome("Lagos")
studentOne = Student("Isaac", "Asimov")

print(welcome)
print(studentOne.firstName)

La salida del código:

Welcome to Lagos
Isaac

Podemos vincular los módulos (archivo y bienvenida) dentro del paquete data a su espacio de nombres principal. Para hacer esto, necesitamos el archivo __init__.py.

En el archivo __init__.py, importamos todos los módulos y sus funciones, clases u objetos dentro del paquete para permitir una fácil administración.

from .file import Student
from .welcome import printWelcome

Ahora, podemos escribir nuestro index.py de manera más sucinta y con un buen enlace al espacio de nombres principal, data.

from data import Student, printWelcome

welcome = printWelcome("Lagos")
studentOne = Student("Isaac", "Asimov")

print(welcome)
print(studentOne.firstName)

La salida será la misma que la última ejecución del código.

Para evitar el mensaje de error ModuleNotFoundError, asegúrese de no tener una declaración de importación incorrecta o errores tipográficos.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Artículo relacionado - Python ModuleNotFoundError

Artículo relacionado - Python Error