2016-11-05 6 views
1

Я переключаюсь с R на Python для нового проекта машинного обучения, который я делаю.Импорт Python для машинного обучения

Я нашел одну архитектуру кода, которая выглядит нормально (изображение ниже), но у меня проблемы с реализацией, если я хочу сохранить код DRY.

enter image description here

Так в основном у меня есть кусок кода (функции), которые я хочу поделиться между различными модулями (а именно 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

ответ

1

Вы должны добавить свой проект в путь системы, так что питон может найти модуль.

Это может быть сделано в Python:

import sys 
sys.path.insert(0, fullPathToProjectFolder) 

Тогда вы будете в состоянии назвать свои модули с

import general_functions 
+0

Я также забыл упомянуть, что я использую virtualenv, и глобальное пространство не должно быть заражено. Это работает в этом случае? – veich

+0

Да. Это влияет на путь только временно, это не влияет на другие запущенные программы python и удаляется при закрытии вашей программы. – Maaaaa

+1

Правильно, но если вы помещаете эти две строки в начало файла, то каждый раз, когда эта программа запускается, вы хороши. – blacksite

0

Вам нужно сделать __init__.py файл в каталоге вы бы как модуль , Итак, functions.py или что-то еще в папке, которую вы можете позвонить с помощью import. Я надеюсь, что это работает https://docs.python.org/3/tutorial/modules.html#packages

 Смежные вопросы

  • Нет связанных вопросов^_^