Digamos que este es el diseño de mi paquete

Package
    :: core
        :: hash
            :: hashgen.py
            :: validate.py
        :: common
            :: classes.py
    :: tools
        :: database_validate.py
    :: bot.py
    :: config.py

Entonces, si quisiera importar database_validate desde herramientas en bot.py, haría:

from tools import database_validate

Pero para core / hash / hashgen, ¿cómo importaría eso? Porque es un poco más largo. Sé que probablemente pueda poner todo en un archivo, pero tengo curiosidad por saber cómo hacer que se importe desde un diseño de carpeta más largo.

0
user775171 15 jul. 2011 a las 01:20

3 respuestas

La mejor respuesta

Al crear un paquete, no olvide el __init__.py. Esto debe estar en cada árbol desde el que desee importar. En su ejemplo, debería verse así ...

Package
    __init__.py
    :: core
        __init__.py
        :: hash
            __init__.py
            :: hashgen.py
            :: validate.py
        :: common
            __init__.py
            :: classes.py
    :: tools
        __init__.py 
       :: database_validate.py
    :: bot.py
    :: config.py

Una vez hecho esto, entonces puedes, como sugirió phihag

from package.core.hash.hashgen import *

Aunque no recomiendo usar * per se usado aquí por simplicidad.

Echa un vistazo a esto - ¡Escrito por el hombre mismo!

3
nneonneo 29 mar. 2013 a las 10:59
import core.hash.hashgen

Alternativamente, para un código más corto pero potencialmente confuso:

from core.hash import hashgen
# Don't forget hashgen now refers to a foreign module
1
phihag 14 jul. 2011 a las 21:23
from package.core.hash import hashgen

Su código debe estar en PYTHONPATH y debe tener archivos __init__.py

0
Facundo Casco 14 jul. 2011 a las 21:27