Серия «101 игра на python»

8

101 игра на python. Файл header.py в директориях проекта

Продолжаю портировать игры на python и добавлять свои

Пост из серии 101 игра на python

Репозиторий для лёгкого обучения коду на игровых примерах


Функция для автоматического определения корневой директории проекта. Используется для упрощения работы с путями в проекте, особенно в случаях, когда структура проекта сложная или когда необходимо динамически определять корневую директорию.

При работе с внешними файлами я использую абсолютные пути. Например, здесь я храню инструкции для модели машинного обучения во внешних файлах.

Что делает код:

  1. Определяет корневую директорию проекта:

    • Функция set_project_root ищет корневую директорию проекта, начиная с директории, где находится текущий файл, и поднимаясь вверх по иерархии директорий.

    • Для идентификации корневой директории используются "маркерные файлы" (например, pyproject.toml, requirements.txt, .git), которые обычно находятся в корне проекта.

    • Если один из маркерных файлов найден, директория, в которой он находится, считается корневой.

  2. Добавляет корневую директорию в sys.path:

    • Если корневая директория не находится в списке sys.path (список путей, по которым Python ищет модули), она добавляется в начало списка. Это позволяет импортировать модули из корневой директории проекта без необходимости указывать полные пути.

  3. Возвращает путь к корневой директории:

    • Функция возвращает объект Path, представляющий путь к корневой директории.

  4. Сохраняет корневую директорию в переменной __root__:

    • После вызова функции set_project_root, результат сохраняется в переменной __root__, которая может быть использована в других частях проекта.

Для чего нужен этот код:

  1. Упрощение работы с путями:

    • В больших проектах часто требуется работать с файлами и директориями, находящимися в разных частях проекта. Этот код автоматически определяет корневую директорию, что упрощает создание относительных путей.

  2. Автоматизация импорта модулей:

    • Добавление корневой директории в sys.path позволяет легко импортировать модули из любой части проекта, не заботясь о том, что Python не найдет их.

  3. Гибкость при переносе проекта:

    • Если проект переносится в другую директорию или его структура изменяется, этот код автоматически адаптируется, так как он динамически определяет корневую директорию.

  4. Универсальность:

    • Код не зависит от конкретной структуры проекта, если в корневой директории присутствуют стандартные маркерные файлы (например, pyproject.toml или .git).

Пример использования:

Предположим, у тебя есть проект со следующей структурой:

В файле main.py ты можешь использовать этот код для определения корневой директории и импорта модулей из других частей проекта:

Показать полностью 3
4

101 игра на python. Gemini получает инструкции

Модель Gemini возвращает ответ, в виде ASCII баннера в зависимости от данной ей инструкции

Продолжаю портировать игры из книги 101 Basic Computer Games (и добавлять свои)


Начало здесь: 👉Предисловие
Список игр


Репозиторий


предыдущие программы, где я работаю с моделью:

Особенности сегодняшней программы:

Дисклаеймер: В этом примере я создаю словарь инструкций внутри кода. Это дурной тон, но мне важно показать, как можно динамически подгружать нужную инструкцию. Считай этот код упрощенным.

  • инструкции для модели хранятся в отдельных файлах и не засоряют код. Теперь можно добавлять сколько угодно инструкций, код останется чистым. Всегда сохраняй настройки во внешних файлах. На мой взгляд, JSON самый удобный формат хранения настроек.

  • ключ от модели начиная с этой программы и далее, пока мне не потребуется отдельное хранилище секретов, я записываю в системную переменную и после первого ввода он будет хранится в ней, что избавляет меня от постоянного ввода ключа.

    Запустить код можно в google colab.
    Код в google colab для демонстрации работы. Он отличается тем, что в colab есть свои нюансы чтения и записи внешних по отношению коду файлов, которые на этом этапе я опускаю, чтобы не засорять код.
    Если ты хочешь запустить код на своей машине, потребуются зависимости:
    pip install google
    pip install google-generativeai
    pip install google-api-python-client

Показать полностью 2
Отличная работа, все прочитано!