Импорт класса из разных уровней папок - Python - PullRequest
1 голос
/ 12 февраля 2020

Я записываю последовательность в модель последовательности, и у меня следующая структура каталогов

MyProject/
     models/ 
          - __init__.py
          - Encoder.py
     train/
          - __init__.py
          - Train.py

Находясь в Train.py, я не могу импортировать классы BiDirectionalEncoder из Encoder.py, несмотря на попытку использовать следующий синтаксис

from models.Encoder import BiDirectionalEncoder 

В строке выше я получаю сообщение об ошибке «ModuleNotFoundError: нет модуля с именем« models »»

from ..models.Encoder import BiDirectionalEncoder

В последней строке я получаю сообщение об ошибке «ImportError: попытка относительного импорта» с неизвестным родительским пакетом "

Есть ли способ исправить это? Я не хочу использовать какой-либо sys.path.append () для принудительного добавления путей. Я использую Python 3.7.6 в Spyder 4.0.1. Спасибо!

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

В одном и том же пакете вы можете выполнять относительный импорт, но поскольку вы выходите из текущего пакета, вам необходимо выполнить абсолютный импорт.

from MyProject.models.Encoder import BiDirectionalEncoder 
0 голосов
/ 12 февраля 2020

Если вы используете какую-либо IDE (например, pycharm), вам нужно установить (мой проект) в качестве исходного загрузочного каталога, иначе вам нужно проверить свой BASE_DIR в settings.py

, и тогда вы сможете импортировать модель.

из моделей. Кодировщик импорта BiDirectionalEncoder

и да, если вы хотите получить доступ к модулю из другой среды, ниже приведена ссылка для способов доступа и совместного использования модулей.

python модуль: - импорт (доступ) создание и совместное использование

надеюсь, что это решит вашу проблему.

...