У меня настроен проект python, в котором мои сценарии хранятся в одной папке, а мои пакеты и данные - в других папках, и я пытаюсь организовать наилучшую структуру и процедуры для повышения надежности ссылок между этими элементами.
Основное использование этой программы - обработка некоторых файлов данных и выдача результатов для включения в отчеты. Мне не нужно помещать это в пакет PyPI или использовать в производстве. Я просто хочу, чтобы этот репозиторий легко использовался любым коллегой, который клонирует его и запускает команды make
.
project_dir/
data/
raw/
source_1.csv
source_2.csv
processed/
tidydata.csv
results.csv
src/
scripts/
clean_raw_data.py
calc_results.py
modules/
tool_a.py
tool_b.py
tool_c.py
Makefile
Если я запускаю сценарий в PyCharm, я могу заставить его работать правильно, потому что IDE позволяет установить папку проекта root в вашем пути. Тем не менее, как только я начинаю пытаться выполнять операции командной строки (например, внутри 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.modules as mods
df = pd.read_csv(f'{ROOT_DIR}/data/raw/source_1.csv')
Так или иначе , Я полагаю, что существует рекомендация по оптимальной настройке для поведения, которое ведет себя подобным образом, но не было никаких хороших рекомендаций. Каков наилучший подход для решения этой проблемы? У меня была мысль переместить мои скрипты в папку над модулями, что позволило бы мне легко делать такие вещи, как import modules.tool_a as ta
, но я бы предпочел не иметь грязной папки scripts
с скрытой директорией modules
(кажется тоже плохо).
project_dir/
data/
raw/
source_1.csv
source_2.csv
processed/
tidydata.csv
results.csv
src/
scripts/
clean_raw_data.py
calc_results.py
modules/
tool_a.py
tool_b.py
tool_c.py
Makefile
Во всяком случае, я многое не знаю о том, как правильно настроить эти вещи, поэтому любые советы приветствуются.