Solucione el error de importación: no se puede importar el nombre en Python
-
Causa del error
ImportError: no se puede importar el nombre
en Python -
Solucione el error
ImportError: no se puede importar el nombre
en Python
Con esta explicación, aprenderemos por qué nos sale un error que es ImportError: no se puede importar el nombre
. También aprenderemos cómo corregir este tipo de error en Python.
Causa del error ImportError: no se puede importar el nombre
en Python
Podemos usar un par de formas de solucionar este error, pero antes de profundizar en las formas de solucionar este error, intentemos entender por qué ocurre este error y cuándo ocurre generalmente el ImportError
.
Se produce un ImportError
en Python si la instrucción importar
dentro de su código experimenta dificultades para importar un módulo con éxito.
Este problema suele ocurrir debido a una instalación defectuosa de una biblioteca externa o una ruta no válida al módulo que está tratando de importar.
Se plantea la pregunta: ¿cuándo ocurre el ImportError: no se puede importar el nombre (xyz)
? Este tipo de ImportError
generalmente ocurre cuando la clase que intentas importar está en una dependencia circular.
¿Qué significa eso? ¿Qué es una dependencia circular? La dependencia circular generalmente ocurre cuando dos módulos intentan importarse entre sí simultáneamente, de modo que ambos dependen el uno del otro.
Para explicar más esto, necesitamos mirar un ejemplo para entender cómo y cuándo ocurre este error. Digamos que tenemos un par de módulos: demo1.py
y demo2.py
.
Antes de pasar a las sentencias de importación
, veamos el contenido de estos módulos y luego las sentencias de importación
.
Como podemos ver, el módulo demo2
tiene un par de funciones: demo2_func1()
y demo2_func2()
. De manera similar, el módulo demo1
tiene una única función llamada demo1_func1()
.
Como vemos, dentro del módulo demo2
, estamos importando demo1_func1
del módulo demo1
. De manera similar, dentro del módulo demo1
, estamos tratando de importar la función llamada demo2_func2()
, que es parte del módulo demo2
.
Centrémonos en el módulo demo2
.
Podemos ver que la función demo2_func1()
imprime una cadena y luego carga la función demo1_func1()
, que hemos importado desde el módulo demo1
. Cuando llama demo1_func1()
, imprimirá una cadena.
En la siguiente línea, dentro de la función demo1_func1()
, llamamos al método demo2_func2()
, por lo que podemos ver que el método demo2_func2()
también forma parte del módulo demo1
. Podemos ver que estos dos módulos son interdependientes.
En este caso, cuando usamos una sentencia como from demo1 import demo1_func1
y from demo2 import demo2_func2
, se produce una dependencia circular.
Si ejecutamos el módulo demo2
, entonces el resultado esperado debería ser algo como esto ya que demo2_func1()
se llama inicialmente, luego pasamos a la función demo1_func1()
y así sucesivamente. Después de la ejecución, tenemos un ImportError
que dice (no se puede importar el nombre 'demo1_func1'
).
ImportError: cannot import name 'demo1_func1' from partially initialized module 'demo1' (most likely
due to a circular import)
Esto ocurre principalmente porque estamos tratando de acceder al contenido de un módulo desde otro y viceversa. Si miramos el módulo demo2.py
, intentamos importar la función demo1_func1
desde demo1
antes de que se inicializara demo1_func1
; ahí es cuando comienza el programa.
Python todavía está inicializando el contenido del módulo demo1
, pero no le damos suficiente tiempo a Python para inicializar la función demo1_func1
. Lo estamos llamando directamente, por lo que encontramos este ImportError
.
Solucione el error ImportError: no se puede importar el nombre
en Python
Ahora veremos cómo podemos solucionar este error. Podemos arreglar este error de dos formas, pero usaremos la forma más fácil: evitar la dependencia circular, y Python puede hacerlo por sí mismo.
Para resolver el problema, debemos hacer ciertos cambios en el código.
Tenemos que modificar la declaración de importación
, y en lugar de importar el contenido del módulo, importamos el módulo completo en ambos archivos.
El código fuente del archivo demo1.py
:
import demo2
def demo1_func1():
print("demo1_func1")
demo2.demo2_func2()
El código del archivo demo2.py
:
import demo1
def demo2_func1():
print("demo2_func1")
demo1.demo1_func1()
def demo2_func2():
print("demo2_func2")
if __name__ == "__main__":
demo2_func1()
Producción :
demo2_func1
demo1_func1
demo2_func2
La mayoría de las veces, este error ocurre cuando estamos desarrollando la aplicación Flask utilizando el enfoque de blueprint, por lo que si está creando una estructura Flask, es posible que deba seguir este enlace.
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedInArtículo relacionado - Python Error
- Administrar fallas de segmentación en Python
- Archivo <Stdin>, Línea 1, en <Módulo> Error en Python
- Arreglar AttributeError: el objeto 'generador' no tiene atributo 'siguiente' en Python
- Arreglar el comando cl.exe falló: no existe tal archivo o directorio en Windows
- Arreglar NameError: la variable no está definida en Python
- Arreglar Socket.Gaierror: [Errno 8] Nodename ni Servname proporcionado, o desconocido en Python