Код: Выделить всё
my_project/
├── Dockerfile
├── Makefile
├── run.py
├── data/
│ ├── raw/
│ └── processed/
└── src/
├── __init__.py
├── config.py
├── settings.env
└── response/
├── __init__.py
├── llm.py
├── instances.py
└── get_response.py
Я начал с простого проекта по получению структурированных ответов от магистратуры с использованием Python. По мере роста проекта я решил сделать его более готовым к производству, добавив правильную структуру и организацию. Однако я не уверен, что моя текущая структура оптимальна, особенно в отношении обработки импорта.
Текущие проблемы
Изначально, когда весь код был в одном папке импорт был простым:
Код: Выделить всё
# When everything was in one folder
from llm import get_completion
from instances import MyClass
Код: Выделить всё
# In run.py
from src.response.llm import get_completion
from src.response.instances import MyClass
Правильно ли это структурировать готовый к использованию проект Python?
Как мне следует обрабатывать импорт, когда я захочу чтобы:
Запускать тесты из отдельного тестового каталога?
Выполнять файлы непосредственно в их папках (например, для разработки/отладки)?
Использовать if __name__ == '__main__': блок с тестовым кодом в отдельных файлах?
Нужно ли мне изменять операторы импорта каждый раз, когда я запускаю файлы из разных мест? Является ли добавление корня проекта в путь Python при прямом запуске лучшим вариантом?
Технические подробности
Версия Python: 3.11
Текущее поведение: файлы запускаются корректно только при запуске из родительского каталога.
Желаемое поведение: возможность запуска файлов, тестов и отладки кода из любого места без постоянного изменения импорта ( если можно)
В настоящее время я не могу запускать различные сценарии из их собственного местоположения, мне приходится запускать их из корня проекта. Как я могу заставить их работать из любого места?
Подробнее здесь: https://stackoverflow.com/questions/793 ... lative-abs