es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Importar un módulo en la misma carpeta provoca un error de subrayado rojo en PyCharm, pero aún así funciona. ¿Qué está pasando?

ANTECEDENTES: Estoy trabajando en el curso de Python “100 Days of Code” impartido por Angela Yu. Soy un programador principiante.

PROBLEMA: Cada vez que intento importar un módulo desde la misma carpeta, PyCharm muestra un error de subrayado rojo. Me dice que no hay ningún módulo llamado “nombre_del_módulo.py”, pero cuando ejecuto el código, aún funciona. Todavía puedo importar variables, listas, diccionarios, etc. Entonces, ¿por qué la línea roja? Por favor, consulte la IMAGEN adjunta para referencia.

IMAGEN: “main_classes_objects_turtle1.py” y “another_module.py” se encuentran en la misma carpeta.

QUÉ HE INTENTADO: Leí en algún lugar que debería marcar la carpeta en la que estoy trabajando como “fuente principal” (“source root”), pero eso solo soluciona el problema para esa carpeta. El problema sigue ocurriendo en otras carpetas.

Gracias de antemano por cualquier ayuda.

ACTUALIZACIÓN: Encontré una solución alternativa para el problema. Si agrego el nombre completo de la ruta, funciona:

import folder.sub_folder.another_module as am

No sabía que podía hacer esto hasta esta noche.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Cómo lidiar con errores de subrayado rojo para la importación de módulos en PyCharm

    Como programador principiante, es posible que encuentres mensajes de error engañosos en tu IDE de PyCharm cuando intentas importar un módulo que existe en la misma carpeta que tu script principal u otro módulo que quieres utilizar. El mensaje de error puede decir algo como:

    No se puede encontrar el módulo 'nombre_del_módulo.py'
    

    Aunque el módulo realmente funciona cuando ejecutas el código, el subrayado rojo puede resultar distractorio y hacerte pensar que algo está mal en tu código. Entonces, ¿qué puedes hacer para resolver este problema?

    Comprendiendo la lógica de importación de módulos en PyCharm

    Antes de abordar las soluciones, es bueno saber por qué PyCharm se comporta de esta manera. Cuando usas la declaración de import en Python, el intérprete busca el módulo en diferentes lugares, incluyendo los módulos integrados, los directorios listados en la variable sys.path y el directorio de trabajo actual. Sin embargo, PyCharm tiene su propia forma de resolver las importaciones de módulos basándose en su configuración de proyecto.

    Por defecto, PyCharm trata cada carpeta dentro de un proyecto como un paquete separado y aplica algunas reglas para determinar la ruta de importación de un módulo. Por ejemplo, si tienes una carpeta llamada mi_modulo que contiene un módulo llamado ayudante.py, y quieres importarlo en tu script principal u otro módulo, puedes utilizar:

    from mi_modulo import ayudante
    

    Sin embargo, PyCharm aún puede marcar esta línea como un error, incluso si funciona, porque sigue una convención de nomenclatura estricta que requiere que el archivo del módulo tenga el mismo nombre que el último componente del paquete. En otras palabras, PyCharm intenta encontrar un archivo llamado ayudante.py dentro de una carpeta llamada mi_modulo, por lo que si el archivo tiene un nombre diferente o está ubicado en otro lugar, PyCharm puede confundirse.

    Solucionando el error de subrayado rojo para las importaciones en la misma carpeta

    Una forma de solucionar el error de subrayado rojo para las importaciones en la misma carpeta, como has mencionado, es marcar la carpeta donde se encuentra tu script principal o módulo como “source root” en PyCharm. Para hacer esto, puedes hacer clic derecho en la carpeta en la ventana de herramientas del proyecto, seleccionar “Marcar directorio como” y elegir “Raíz de fuentes”. Esto le indica a PyCharm que esta carpeta es la raíz de los archivos fuente de Python de tu proyecto, y debe utilizar esta carpeta como punto de partida para resolver las importaciones de módulos. Sin embargo, como has notado, esta solución solo es local y aún puedes ver el error en otras carpetas.

    Otra forma de solucionar el error de subrayado rojo, que en realidad es más “pythonico”, es utilizar importaciones absolutas. En Python, puedes especificar la ruta exacta de un módulo que deseas importar en relación con el paquete de nivel superior. Por ejemplo, si tienes un paquete llamado carpeta.sub_carpeta que contiene un módulo llamado otro_modulo.py, y quieres importarlo en tu script principal u otro módulo, puedes usar:

    from carpeta.sub_carpeta import otro_modulo as om
    

    Esta línea le indica a Python que busque el archivo otro_modulo.py dentro de la carpeta sub_carpeta, que está dentro del paquete carpeta. De esta manera, no tienes que preocuparte por el directorio de trabajo actual o la configuración del proyecto de PyCharm. Sin embargo, debes asegurarte de que la estructura de tus paquetes sea coherente con tus importaciones y evitar importaciones circulares o importaciones relativas que puedan causar confusiones.

    Conclusión

    En resumen, el error de subrayado rojo que ves en PyCharm al importar un módulo desde la misma carpeta se puede solucionar marcando la carpeta como una raíz de origen o utilizando importaciones absolutas. Ambos métodos tienen sus ventajas y desventajas, y dependen de la estructura y filosofía de tu proyecto. Sin embargo, una vez que te familiarices con estas técnicas, podrás enfocarte en la lógica de tu código sin distraerte por mensajes de error engañosos. ¡Feliz codificación!

Comments are closed.