Cómo importar un módulo desde el sub-directorio

Fallé al importar un módulo del subdirectorio en Python. A continuación se muestra la estructura de mi proyecto.

./main.py ./sub ./sub/__init__.py ./sub/aname.py 

cuando ejecuto python main.py , recibí este error:

 Traceback (most recent call last): File "main.py", line 4, in  import sub.aname File "/Users/dev/python/demo/sub/__init__.py", line 1, in  from aname import print_func ModuleNotFoundError: No module named 'aname' 

No sé que no se pudo cargar el módulo aname . A continuación se muestra el código fuente:

main.py :

 #!/usr/bin/python import sub.aname print_func('zz') 

sub/__init__.py :

 from aname import print_func 

sub/aname.py :

 def print_func( par ): print ("Hello : ", par) return 

Estoy usando python 3.6.0 en MacOS

Hay varios errores en tus scripts de Python.

Importacion relativa

Primero, para hacer una importación relativa, debe usar puntos destacados (consulte la syntax de la Decisión de Importaciones Relativas de Guido ).

En sub/__init__.py , reemplace:

 from aname import print_func 

con:

 from .aname import print_func 

Importando una función

Para importar una función desde un módulo dado, puede usar la instrucción from ... import ...

En main.py , reemplace:

 import sub.aname 

con:

 from sub import print_func 
 from sub import aname aname.print_func('zz') 

Probablemente la solución más elegante es usar importaciones relativas en tu submódulo sub :

sub.__init__.py

 from .aname import print_func 

Pero también necesita importar el print_func en main.py contrario obtendrá un NameError cuando intente ejecutar print_func :

main.py

 from sub import print_func # or: from sub.aname import print_func print_func('zz')