1. Главная
  2. Библиотека
  3. Программирование
  4. В проекте Python-разработчики ведут файл requirements.txt...
Разбор задачи

В проекте Python-разработчики ведут файл requirements.txt, но со временем он превращается в помойку: одни и те же пакеты дублируются; повсюду комментарии; есть специальные зависимости «только для разработки», помеченные ; dev. Примеры строк: Основные

  • Предмет: Программирование
  • Автор: Кэмп
  • #Основы алгоритмизации и программирования
  • #Языки программирования (C++, Java, Python и др.)
В проекте Python-разработчики ведут файл requirements.txt, но со временем он превращается в помойку: одни и те же пакеты дублируются; повсюду комментарии; есть специальные зависимости «только для разработки», помеченные ; dev. Примеры строк: Основные

Условие:

В проекте Python-разработчики ведут файл requirements.txt, но со временем он превращается в помойку:

одни и те же пакеты дублируются;
повсюду комментарии;
есть специальные зависимости «только для разработки», помеченные ; dev.
Примеры строк:

# Основные зависимости\nfastapi==0.115.0 # веб-фреймворк
\nuvicorn==0.30.0
\npytest==7.0.0 ; dev # только для тестов\nblack==24.1.0 ; dev
\nfastapi==0.115.0 # дубль, кто-то добавил ещё раз
Перед выкладкой на продакшен нужно получить аккуратный список зависимостей, который:

Не содержит пустых строк и комментариев.
Не содержит дублей (каждый пакет/строка — один раз, в порядке первого появления).
Позволяет включать или не включать dev-зависимости, помеченные ; dev.
Реализовать функцию:
\nclean_requirements(lines, include_dev=False)
которая:

Принимает:
\nlines — список строк (как будто это строки из requirements.txt);\ninclude_dev — булев флаг, по умолчанию False.
Для каждой строки:

Удаляет пробелы по краям.
Если строка пустая после strip() — пропускает её.
Если строка начинается с # (после strip()) — пропускает её (это комментарий).
Поддерживает dev-зависимости:

Если строка заканчивается пометкой ; dev (регистр игнорируется, пробелы перед ; допускаются), например:

"pytest==7.0.0 ; dev"
"black==24.1.0 ; DEV"
То это dev-зависимость.

Если include_dev == False — такие строки игнорируются.

Если include_dev == True — строка остаётся, но сама пометка ; dev (с пробелами) удаляется.

Удаляет встроенные комментарии:

Если в строке встречается #, всё, что после #, считается комментарием и отбрасывается. Пример: "fastapi==0.115.0 # дубль" → "fastapi==0.115.0".
После всех обработок:

Если строка стала пустой — она игнорируется.
В итоговый список добавляются только уникальные строки, то есть если такая строка уже была, повторно не добавляется (порядок — по первому появлению).
Возвращает список очищенных строк.

Решение:

Для решения этой задачи нам потребуется последовательно обработать каждую строку, используя методы строк Python, такие как .strip(), .split(), и регулярные выражения для гибкого поиска пометки ; dev.

Решение задачи

Внутри — полный разбор, аргументация, алгоритм решения, частые ошибки и как отвечать на каверзные вопросы препода, если спросит

Попробуй решить по шагам

Попробуй один шаг и продолжи в режиме обучения или посмотри готовое решение

Какой подход наиболее эффективен для обеспечения уникальности строк зависимостей в итоговом списке, сохраняя при этом порядок их первого появления?

Что нужно знать по теме:

Что нужно знать по теме

Алгоритм решения

Топ 3 ошибок

Что спросит препод

Выбери предмет