Импорт Python для машинного обучения
Я переключаюсь с R на Python для нового проекта машинного обучения, который я делаю.
Я нашел одну архитектуру кода, которая выглядит нормально (изображение ниже), но у меня есть проблемы с реализацией, если я хочу сохранить мой код СУХИМ.
Так что в основном у меня есть кусок кода (функции), который я хочу поделиться между различными модулями (а именно data
, features
а также model
находится под src
модуль). Этот код в этом случае содержит функции для загрузки и сохранения данных.
Проблема в том, что я не могу импортировать функции из верхнего модуля (например, если у меня было functions.py
прямо под src
папка)
Я мог бы добавить отдельный functions.py
внутри каждого модуля (data
, features
, models
), но это не помогло бы мне попытаться создать хорошо структурированный проект.
Я полагаю, что я не единственный с этой проблемой.
Как это обычно обрабатывается?
Как создать общий модуль, который может использоваться всеми наиболее глубоко вложенными модулями? (Я хотел бы импортировать тот же модуль в make_dataset.py
, build_features.py
, predict_model.py
, train_model.py
)
РЕДАКТИРОВАТЬ:
Я также забыл упомянуть, что использую 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
2 ответа
Вам нужно добавить свой проект в системный путь, чтобы python мог найти модуль.
Это может быть сделано в Python:
import sys
sys.path.insert(0, fullPathToProjectFolder)
Тогда вы сможете вызывать ваши модули с
import general_functions
Вам нужно сделать __init__.py
файл в вашем каталоге вы бы сделали как модуль. Так functions.py
или что-то находится в папке, с которой вы можете позвонить import
, Я надеюсь, что это работает https://docs.python.org/3/tutorial/modules.html