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, aparece el error, que Python 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
python
import
module
subdirectory
Razer
fuente
fuente
__init__.py
a cada subcarpeta desde la que está importando.__init__.py
puede hacer el trabajo.Foo1
estuviera en el directorio principal y uno codificara algo comofrom Foo1 import *
. ¿Hay alguna manera de lograr el mismo efecto para que no tenga que anteponer todo conFoo1
?Solo para notificar aquí. (de una abeja nueva, keviv22)
Nunca jamás, por el bien de su propio bien, nombre las carpetas o archivos con símbolos como "-" o "_". Si lo hizo, es posible que tenga algunos problemas. como el mío, digamos, aunque su comando para importar es correcto, no podrá importar con éxito los archivos deseados que están disponibles dentro de esas carpetas con nombre.
Nombres de carpetas no válidos de la siguiente manera:
nombres de carpeta válidos para arriba:
Qué error cometí:
considere la estructura del archivo.
¿Qué quería hacer?
¿Qué comando hice?
from Core.Generic-Class-Folder.targetClass import functionExecute
SyntaxError: invalid syntax
Intenté muchas búsquedas y vi muchas preguntas de stackoverflow y no pude decidir qué salió mal. Verifiqué mis archivos varias veces, usé el
__init__.py
archivo, inserté la ruta del entorno y me preocupé enormemente por lo que salió mal ...Y después de mucho, mucho tiempo, me di cuenta de esto mientras hablaba con un amigo. Soy un poco estúpido por usar tales convenciones de nomenclatura. Nunca debería usar espacios o símbolos especiales para definir un nombre para ninguna carpeta o archivo. Entonces, esto es lo que quería transmitir. ¡Tenga un buen día!
(perdón por la publicación enorme sobre esto ... simplemente dejando ir mis frustraciones .... :) ¡Gracias!)
fuente
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:
fuente
Digamos que su proyecto está estructurado de esta manera:
En el interior
run.py
, puede importar los scripts uno y dos mediante:Ahora, aún dentro
run.py
, podrás llamar a sus métodos con:fuente
Simplemente cree un archivo ___init____.py vacío y agréguelo en la raíz, así como en todo el subdirectorio / carpeta de su aplicación de Python donde tiene otros módulos de Python.
fuente
Tuve problemas incluso cuando init .py existía en la subcarpeta y todo lo que faltaba era agregar 'como' después de la importación
fuente