Условие:
В проекте 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".
После всех обработок:
Если строка стала пустой — она игнорируется.
В итоговый список добавляются только уникальные строки, то есть если такая строка уже была, повторно не добавляется (порядок — по первому появлению).
Возвращает список очищенных строк.

