Python3.req.py: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «Пришла пора переписать [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

TODO