101 игра на python. Файл header.py в директориях проекта
Продолжаю портировать игры на python и добавлять свои
Пост из серии 101 игра на python
Репозиторий для лёгкого обучения коду на игровых примерах
Функция для автоматического определения корневой директории проекта. Используется для упрощения работы с путями в проекте, особенно в случаях, когда структура проекта сложная или когда необходимо динамически определять корневую директорию.
При работе с внешними файлами я использую абсолютные пути. Например, здесь я храню инструкции для модели машинного обучения во внешних файлах.
Что делает код:
Определяет корневую директорию проекта:
Функция set_project_root ищет корневую директорию проекта, начиная с директории, где находится текущий файл, и поднимаясь вверх по иерархии директорий.
Для идентификации корневой директории используются "маркерные файлы" (например, pyproject.toml, requirements.txt, .git), которые обычно находятся в корне проекта.
Если один из маркерных файлов найден, директория, в которой он находится, считается корневой.
Добавляет корневую директорию в sys.path:
Если корневая директория не находится в списке sys.path (список путей, по которым Python ищет модули), она добавляется в начало списка. Это позволяет импортировать модули из корневой директории проекта без необходимости указывать полные пути.
Возвращает путь к корневой директории:
Функция возвращает объект Path, представляющий путь к корневой директории.
Сохраняет корневую директорию в переменной __root__:
После вызова функции set_project_root, результат сохраняется в переменной __root__, которая может быть использована в других частях проекта.
Для чего нужен этот код:
Упрощение работы с путями:
В больших проектах часто требуется работать с файлами и директориями, находящимися в разных частях проекта. Этот код автоматически определяет корневую директорию, что упрощает создание относительных путей.
Автоматизация импорта модулей:
Добавление корневой директории в sys.path позволяет легко импортировать модули из любой части проекта, не заботясь о том, что Python не найдет их.
Гибкость при переносе проекта:
Если проект переносится в другую директорию или его структура изменяется, этот код автоматически адаптируется, так как он динамически определяет корневую директорию.
Универсальность:
Код не зависит от конкретной структуры проекта, если в корневой директории присутствуют стандартные маркерные файлы (например, pyproject.toml или .git).
Пример использования:
Предположим, у тебя есть проект со следующей структурой:
В файле main.py ты можешь использовать этот код для определения корневой директории и импорта модулей из других частей проекта:




