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.

Añadiendo un módulo de Python desde una carpeta diferente.

Tengo mi carpeta de aplicación con mi archivo main.py y una carpeta lib con algunos módulos:

LeapMotionInterpreter --> DataExtractor.py
                        lib --> Leap.py

Ya he intentado hacer esto y todos dicen que use sys.path.insert o sys.path.append, pero nada parece funcionar. Incluso Python parece no saber que hay una carpeta lib allí, a pesar de que imprimir sys.path muestra la nueva ruta agregada a lib.

Aquí está el código que he intentado:

1.

import sys
sys.path.insert(0, 'C:/Users/winba/Desktop/TYP/LeapMotionInterpreter/lib')
print(sys.path)

Resultado:

['C:/Users/winba/Desktop/TYP/LeapMotionInterpreter/lib', 'C:\\Users\\winba\\Desktop\\TYP\\LeapMotionInterpreter']

2.

import sys
sys.path.append('C:/Users/winba/Desktop/TYP/LeapMotionInterpreter/lib')
print(sys.path)

Este solo muestra la ruta de lib al final del array. También he intentado escribir las rutas con \ individuales o dobles en lugar de /, pero todos estos solo me dan un error ‘No hay ningún módulo llamado ‘Leap” si intento importarlo y ni siquiera reconoce la existencia de la carpeta lib. Además, poner mi módulo en el mismo archivo parece funcionar, ya que Python puede encontrar instantáneamente el archivo Leap.py. Sin embargo, este será un proyecto bastante grande y quería mantenerlo ordenado usando carpetas, por lo que cualquier ayuda sería apreciada. Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Para importar módulos desde una carpeta ubicada fuera de la carpeta principal del proyecto, como en este caso la carpeta lib, es necesario agregar la ruta de esa carpeta a la lista sys.path. Ambos métodos mencionados por el usuario (sys.path.insert y sys.path.append) agregan la ruta a la lista sys.path correctamente. Sin embargo, el problema parece ser el modo en que se escriben las instrucciones de importación.

    Considerando la estructura de carpetas mencionada en la pregunta:

    LeapMotionInterpreter --> main.py 
                         --> lib --> DataExtractor.py 
                                 --> Leap.py
    

    Para importar el módulo Leap.py en DataExtractor.py, es necesario utilizar la siguiente instrucción de importación:

    from lib.Leap import <nombre_modulo>
    

    donde <nombre_modulo> es el nombre del módulo que queremos importar.

    De manera similar, para importar DataExtractor.py en main.py, se debe utilizar:

    from lib.DataExtractor import <nombre_modulo>
    

    donde <nombre_modulo> es el nombre del módulo que queremos importar.

    Por lo tanto, las instrucciones de importación correctas para esta estructura de carpetas específica serían:

    # en DataExtractor.py
    from lib.Leap import <nombre_modulo>
    
    # en main.py
    from lib.DataExtractor import <nombre_modulo>
    

    Si las instrucciones de importación se escriben correctamente y se agrega la ruta a la carpeta lib a sys.path, los módulos deberían importarse correctamente.

    Cabe destacar que <nombre_modulo> debe reemplazarse por el nombre real del módulo que estamos intentando importar.

Comments are closed.