Как импортировать файл из вложенного каталога с помощью django
Я создаю веб-приложение django. Для кода у меня есть несколько вспомогательных функций, которые я пытаюсь импортировать, но django выдает мне ModuleNotFoundError. Это структура моего файла
── stock_predictor
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── models_helper
│ ├── __init__.py
│ ├── arma.py
│ ├── data_handler.py
│ └── yahoo_stock_data.py
├── tasks.py
├── templates
│ ├── base.html
│ └── homepage.html
├── tests.py
├── urls.py
└── views.py
Здесь каталог models_helper содержит список файлов, которые я хочу импортировать в файл tasks.py.
Я попробовал добавить файл __init__.py в каталог models_helper, но это не решило проблему. Я также попробовал добавить путь к файлу sys.path. Это тоже, похоже, не решает проблему. Мои импорты в файлах tasks.py выглядят следующим образом.
from models_helper.yahoo_stock_data import YahooStockData
from models_helper.data_handler import DataHandler
from models_helper.arma import AlgoARMA
Ошибка, которую я получаю, выглядит следующим образом.
ModuleNotFoundError: No module named 'models_helper'
NOTE: Похоже, это проблема django, поскольку я могу импортировать, используя sys и запускать скрипт python прямо из терминала.
Вот ссылки, по которым я перешел, чтобы заставить код работать, но он не работает.
- Importing modules from nested folder
- Import a module from a relative path
- Importing files from different folder
Обычно корнем является каталог, расположенный прямо над приложениями, поэтому вы импортируете с именем приложения в качестве имени первого модуля:
from stock_predictor.models_helper.yahoo_stock_data import YahooStockData
в модулях в приложении (stock_predictor), например models.py, views.py, tasks.py и т.д. вы можете использовать относительный импорт, например:
# for models.py, views.py, tasks.py, etc.
from .models_helper.yahoo_stock_data import YahooStockData
Вы хотите добавить импорт в task.py, тогда он должен выглядеть как
относительный импорт
from models_helper import YahooStockData
from models_helper import DataHandler
from models_helper import AlgoARMA
поскольку init.py показывает, что это папка пакета, вы должны импортировать из этого пакета, здесь models_helper - пакет, а YahooStockData - ваш импорт.
абсолютный импорт
import models_helper.yahoo_stock_data
import models_helper.data_handler
import models_helper.arma
Импортировать из root
from stock_predictor.models_helper.yahoo_stock_data import YahooStockData
from stock_predictor.models_helper.data_handler import DataHandler
from stock_predictor.models_helper.arma import AlgoARMA