Я пишу модуль python neuralnet. Он отлично работает в Python2, но в Python3 импорт не работает.Python3 правильный способ импорта относительного или абсолютного?
Это моя структура кода.
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 необходимо импортировать neuralnet.py в neuralnet class.
neuralnet.py необходимо импортировать слои/inlayer.py и т.д.
(я предпочитаю относительно импорта.)
У меня есть другое приложение (classify.py), который необходимо импортировать этот модуль. Где я ...
from neuralnet.neuralnet import neuralnet
Я попробовал несколько способов импорта. Либо я получаю сообщение об ошибке (в основном аркан, как родитель не импортируется)
1) Во время работы train.py (который является частью модуля neuralnet)
from . import layer # In file neuralnet.py
SystemError: Parent module '' not loaded, cannot perform relative import
Или
2) при запуске classify.py (который находится вне модуля).
from layer.inlayers import input_layer # In file neuralnet.py
ImportError: No module named 'layer'
В течение многих лет мой импорт работал отлично на Python2. Мне интересно, что Python3 ожидает от меня? Должен ли я перемещать train.py на внешний модуль (технически это не входит в модуль)? Пожалуйста, предложите лучшую практику.
Благодаря Ракеш
Под 'net.py' вы имеете в виду' neuralnet.py'? Ваш пример не включает файл, называемый 'net.py'. Кроме того, если train.py не является частью вашего пакета, то да, вы должны его переместить. – BrenBarn