libreria importar gestion clases archivos python import module subfolder

gestion - importar clases en python



Importar módulo de la subcarpeta (3)

Establezca su variable de entorno PYTHONPATH. Por ejemplo, como este PYTHONPATH =.: .. (para la familia * nix).

También puede agregar manualmente su directorio actual (src en su caso) a pythonpath:

import os import sys sys.path.insert(0, os.getcwd())

Quiero importar subcarpetas como módulos. Por lo tanto, cada subcarpeta contiene un __init__.py . Mi estructura de carpetas es así:

src/ main.py dirFoo/ __init__.py foofactory.py dirFoo1/ __init__.py foo1.py dirFoo2/ __init__.py foo2.py

En mi script principal, importo

from dirFoo.foofactory import FooFactory

En este archivo de fábrica, incluyo los submódulos:

from dirFoo1.foo1 import Foo1 from dirFoo2.foo2 import Foo2

Si llamo a mi foofactory obtengo el error, esa pitón no puede importar los submódulos foo1 y foo2:

Traceback (most recent call last): File "/Users/tmp/src/main.py", line 1, in <module> from dirFoo.foofactory import FooFactory File "/Users/tmp/src/dirFoo/foofactory.py", line 1, in <module> from dirFoo1.foo1 import Foo1 ImportError: No module named dirFoo1.foo1


No hay necesidad de meterse con su PYTHONPATH o sys.path aquí.

Para usar correctamente las importaciones absolutas en un paquete, debe incluir también el nombre del paquete "raíz", por ejemplo:

from dirFoo.dirFoo1.foo1 import Foo1 from dirFoo.dirFoo2.foo2 import Foo2

O puede usar importaciones relativas :

from .dirfoo1.foo1 import Foo1 from .dirfoo1.foo1 import Foo2


Solo para notificar aquí. (de un bebe nuevo, keviv22)

Nunca por el bien de usted, nombre las carpetas o archivos con espacios o símbolos como "-" o "_". Si lo hizo, puede enfrentar algunos problemas. como el mío, digamos que, aunque su orden de importación es correcta, no podrá importar con éxito los archivos deseados que están disponibles dentro de dichas carpetas nombradas.

Nombres de carpeta inválidos de la siguiente manera:

  • Genérico-Clases-Carpeta
  • Generic_Classes_Folder

nombres de carpeta válidos para arriba:

  • GenericClassesFolder o Genericclassesfolder o genericClassesFolder (o así sin espacios ni símbolos especiales entre las palabras)

Qué error cometí

considera la estructura del archivo.

Parent . __init__.py . Setup .. __init__.py .. Generic-Class-Folder ... __init__.py ... targetClass.py . Check .. __init__.py .. testFile.py

¿Qué quería hacer?

  • de testFile.py, quería importar el archivo ''targetClass.py'' dentro del archivo Generic-Class-Folder para usar la función llamada "functionExecute" en el archivo ''targetClass.py''

¿Qué comando hice?

  • de ''testFile.py'', escribió el comando, desde Core.Generic-Class-Folder.targetClass import functionExecute
  • Obtuve errores como "SyntaxError: sintaxis no válida"

Intenté muchas búsquedas y vi muchas preguntas de y no pude decidir qué salió mal. __init__.py mis archivos varias veces, __init__.py archivo __init__.py , __init__.py la ruta del entorno y me preocupé por lo que salió mal ...

Y después de un largo y largo tiempo, me di cuenta de esto mientras hablaba con un amigo mío. Soy un poco estúpido para usar tales convenciones de nombres. Nunca debería usar espacio o símbolos especiales para definir un nombre para cualquier carpeta o archivo. Entonces, esto es lo que quería transmitir. ¡Tenga un buen día!

(Lo siento por la gran publicación sobre esto ... simplemente dejando ir mis frustraciones .... :) ¡Gracias!)