Tengo un archivo llamado tester.py
, ubicado en /project
.Importar un archivo desde un subdirectorio?
/project
tiene un subdirectorio llamado lib
, con un archivo llamado BoxTime.py
:
/project/tester.py
/project/lib/BoxTime.py
quiero importar BoxTime
de tester
. He intentado esto:
import lib.BoxTime
que dio como resultado:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
¿Alguna idea de cómo importar BoxTime
del subdirectorio?
EDITAR
El __init__.py
era el problema, pero no se olvide para referirse a BoxTime
como lib.BoxTime
, o usar:
import lib.BoxTime as BT
...
BT.bt_function()
porqué se siente * * hacky? Es la forma en que python marca los directorios de importación seguros/disponibles. – IAbstract
No solo marca los directorios de importación seguros/disponibles, sino que también proporciona una forma de ejecutar algún código de inicialización al importar un nombre de directorio. – Sadjad
Sí, esto es hacky e incluso sucio, y en mi opinión, el lenguaje no debería imponer su forma de cargar archivos a través del sistema de archivos. En PHP resolvimos el problema permitiendo que el código de usuario registre múltiples funciones de carga automática que se invocan cuando falta un namespace/clase. Luego, la comunidad produjo el estándar PSR-4 y Composer lo implementa, y hoy en día nadie tiene que preocuparse por eso. Y no hay archivos "__init__" estúpidos codificados (pero si lo desea, solo registre un enganche automático. Esta es la diferencia entre _hacky_ y _hackable_). –