Состав определяют по двум источникам: перечню зависимостей в проекте — requirements.txt или pyproject.toml — и списку фактически установленных библиотек, то есть выводу pip freeze с рабочего окружения. Второй источник для Python важнее первого: перечень называет то, что просили поставить, а список — то, что действительно стоит, включая библиотеки, подтянутые не напрямую, а через другие. Их сопоставляют с текстами условий использования и с уведомлениями, вошедшими в поставку.
Отдельно проверяют, зафиксированы ли версии. По перечню без точных версий окружение не повторить: тот же файл, установленный через полгода, соберёт другой набор библиотек и другое поведение. Отсутствие файла блокировки версий — то есть файла, который закрепляет точный набор установленных библиотек, — самостоятельное техническое обстоятельство, которое отмечают в заключении. Если поставлен вопрос об уязвимостях, отмечают опубликованные записи для указанных версий, но запись об уязвимости библиотеки ещё не означает, что уязвима сама программа.
Правовую оценку эксперт не даёт: соблюдены ли условия лицензии и какие последствия из этого следуют, определяет суд. Поэтому снимите список установленных библиотек с рабочего окружения до того, как его переустановят.