Я переключаюсь с R на Python для нового проекта машинного обучения, который я делаю.Импорт Python для машинного обучения
Я нашел одну архитектуру кода, которая выглядит нормально (изображение ниже), но у меня проблемы с реализацией, если я хочу сохранить код DRY.
Так в основном у меня есть кусок кода (функции), которые я хочу поделиться между различными модулями (а именно data
, features
и model
сек расположенные под src
модуля). Этот код в этом случае содержит функции по загрузке и сохранению данных.
Проблема заключается в том, что я не могу импортировать функции из верхнего модуля (например, если у меня был functions.py
непосредственно под src
папку)
Я мог бы добавить отдельный functions.py
внутри каждого модуля (data
, features
, models
), но это свело бы цель моей попытки создать хорошо структурированный проект.
Я предполагаю, что я не единственный в этом вопросе.
Как обычно это обрабатывается?
Как создать общий модуль, который может использоваться всеми наиболее глубоко вложенными модулями? (Я хотел бы импортировать один и тот же модуль в make_dataset.py
, build_features.py
, predict_model.py
, train_model.py
)
EDIT:
я забыл упомянуть, я использую virtualenv и глобальное пространство не должно быть загрязнены.
РЕШЕНИЕ:
Так что я в конечном итоге поступаю я добавил следующий код в мой топ пакет __init__.py
файл: import sys, os fullPathToProjectFolder = os.path.dirname(os.path.realpath(__file__)) sys.path.insert(0, fullPathToProjectFolder) print('__init__ project packege linked: ' + fullPathToProjectFolder)
Поэтому, когда вы используете что-либо от основного пакета или подпакета так ли автоматически связывается (потому что при импорте основного пакета тогда автоматически вызывается файл __init__.py
). И каждый модуль может сделать его импорт относительно верхнего пакета.
например: если train_model.py
хочет импортировать build_features.py
было бы это сделать так:
from features import build_features
Я также забыл упомянуть, что я использую virtualenv, и глобальное пространство не должно быть заражено. Это работает в этом случае? – veich
Да. Это влияет на путь только временно, это не влияет на другие запущенные программы python и удаляется при закрытии вашей программы. – Maaaaa
Правильно, но если вы помещаете эти две строки в начало файла, то каждый раз, когда эта программа запускается, вы хороши. – blacksite