Импорт 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

Другие вопросы по тегам