Python3.req.py: различия между версиями
(Новая страница: «Пришла пора переписать [http://git.altlinux.org/gears/r/rpm-build-python3.git?p=rpm-build-python3.git;a=blob;f=rpm-build-python3/python3.req.p…») |
м (→Кодировки) |
||
Строка 45: | Строка 45: | ||
В текущем python3.req.py довольно много места посвящено разборкам с кодировками ([https://www.python.org/dev/peps/pep-0263 PEP263]). PEP это действующий, python3 его поддерживает. | В текущем python3.req.py довольно много места посвящено разборкам с кодировками ([https://www.python.org/dev/peps/pep-0263 PEP263]). PEP это действующий, python3 его поддерживает. | ||
'''TODO''': нужна логика определения кодировки и зависимость на соответствующий модуль, всё равно `encodings` входят в {{pkg|python3-base}} | '''TODO''': проверить, ''нужна ли'' эта логика определения кодировки и зависимость на соответствующий модуль, всё равно `encodings` входят в {{pkg|python3-base}} | ||
= TODO = | = TODO = | ||
[[Категория:python3]] [[Категория:Sisyphus]] [[Категория:TODO]] | [[Категория:python3]] [[Категория:Sisyphus]] [[Категория:TODO]] |
Версия от 13:33, 30 июня 2021
Пришла пора переписать 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