У меня настроен проект python, в котором мои сценарии хранятся в одной папке, а мои пакеты и данные - в других папках, и я пытаюсь организовать наилучшую структуру и процедуры для повышения надежности ссылок между этими элементами:
project_dir/
data/
raw/
source_1.csv
source_2.csv
processed/
tidydata.csv
results.csv
src/
scripts/
clean_raw_data.py
calc_results.py
packages/
import_tools
tool_a.py
tool_b.py
calc_tools
Makefile
Мое желание - иметь возможность надежно ссылаться на мои пакеты посредством импорта (./src/packages
) и моих данных (./data
) с помощью операций чтения и записи файлов из любого из моих сценариев в ./src/scripts
папка.
Моя текущая настройка включает в себя следующие действия:
Для импорта пакетов (кажется плохой практикой вызывать функции для импорта других функций):
# clean_raw_data.py
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent.parent))
import packages.import_tools as imptool
Для чтения и записи файлов:
import pandas as pd
df = pd.read_csv('../../data/raw/source_1.csv')
# operations
df.to_csv('../../data/processed/tidydata.csv')
В идеале я бы предпочел, чтобы все было доступно по ссылке из папки проекта project_dir
в любом файле или сценарии в моей структуре, чтобы я мог выполнять такие действия, как:
import src.packages.import_tools as imptool
df = pd.read_csv(f'{ROOT_DIR}/data/raw/source_1.csv')
Так или иначе. Я полагаю, что существует рекомендация по оптимальной настройке для поведения, которое ведет себя подобным образом, но не было никаких хороших рекомендаций. Как лучше всего справиться с этим?