Python3 forma correcta de importar relativa o absoluta?

Estoy escribiendo un módulo de Python neuralnet . Estaba funcionando bien en Python2, pero en Python3, las importaciones están fallando.

Esta es mi estructura de código.

neuralnet/ __init__.py train.py # A wrapper to train (does not define new things) neuralnet.py # Defines the workhorse class neuralnet layers/ __init__.py inlayer.py # Defines input layer class hiddenlayer.py application/ # A seperate application (not part of the package) classify.py # Imports the neuralnet class from neuralnet.py 

train.py necesita importar la clase de neuralnet de neuralnet.py.

neuralnet.py necesita importar capas / inlayer.py etc.

(Prefiero las importaciones relativas.)

Tengo una aplicación diferente (classify.py) que necesita importar este módulo. Donde hago …

 from neuralnet.neuralnet import neuralnet 

He intentado algunas maneras de importar. O me sale un error (en su mayoría, arcano como padre no se importa)

1) Mientras se ejecuta train.py (que es parte del módulo de neural network)

 from . import layer # In file neuralnet.py SystemError: Parent module '' not loaded, cannot perform relative import 

O

2) mientras se ejecuta classify.py (que está fuera del módulo).

 from layer.inlayers import input_layer # In file neuralnet.py ImportError: No module named 'layer' 

Mis importaciones funcionaron perfectamente bien durante años en Python2. Me pregunto qué espera Python3 de mí. ¿Debo mover train.py fuera de mi módulo (técnicamente no es una parte del módulo)? Por favor, sugiera mejores prácticas.

Gracias Rakesh

En Python 3, las importaciones relativas implícitas están prohibidas, consulte https://www.python.org/dev/peps/pep-0328/ y https://docs.python.org/release/3.0.1/whatsnew/3.0. html # syntax eliminada :

La única syntax aceptable para importaciones relativas es de. [Módulo] nombre de importación. Todas las formas de importación no comienzan con. Se interpretan como importaciones absolutas. (PEP 0328)

from .stuff import Stuff es una importación relativa explícita , que debe “usar” siempre que sea posible, y debe usarse en Python 3, siempre que sea posible. Visite https://stackoverflow.com/a/12173406/145400 para un análisis más profundo de las importaciones relativas.