Python3.req.py
Пришла пора переписать python3.req.py из пакета rpm-build-python3. Причина: altbug #40116. Если коротко: в python 3.10 окончательно упразднили модули parser и symbol, которые составляют главную логику этого скирпта. Сам скрипт небольшой, но код довольно плотный и функциональностей в нём много.
Текущая функциональность
Скрипт получает из командной строки (если она пуста — читает из stdin) список файлов, предположительно, питоновских или .so-библиотек.
Обработка .so
В случае .so он не проверяет, что библиотека действительно имеет отношение к python, и просто выдаёт версию ABI
$ python3 python3.req.py /usr/lib64/libaa.so.1 python3.9-ABI(64bit)
Обработка (предположительно) python файлов
Если файл не .so, .pyc, .pyo, или .pth, он пытается его распрасить соответствующим модулем.
- Для .py файлов и файлов c любым шебангом ошибка парсинга означает ошибку
- Для остальных файлов это предупреждение о том, что файл, возможно, не питоновский
- Пустые файлы игнорируются
В результате на стандартный вывод выдаётся список зависимостей в принятом для python3 формате:
$ python3 python3.req.py python3.req.py python3(os) python3(os) python3(parser) python3(symbol) python3(token) python3(types) python3(subprocess) python3(re) python3(encodings) python3(subprocess)
TODO При этом в диагностике выводится python3.req: python3.req.py: skipping sys. Почему sys пропущен, а os — нет?
Переменные окружения
TODO
Логика работы
TODO
Кодировки
В текущем python3.req.py довольно много места посвящено разборкам с кодировками (PEP263). PEP это действующий, python3 его поддерживает.
TODO: нужна логика определения кодировки и зависимость на соответствующий модуль, всё равно `encodings` входят в python3-base