Bug 53296

Summary: normalization of dist-info
Product: Sisyphus Reporter: Stanislav Levin <slev>
Component: python3-module-setuptoolsAssignee: Stanislav Levin <slev>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: antohami, cas, cow, evg, george, grenka, imz, kotopesutility, lav, nbr, qa_viy, rider, sem, shaba, sin, slev, toni, vitty, viy
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Stanislav Levin 2025-03-04 12:40:48 MSK
As of setuptools 75.8.1:
https://setuptools.pypa.io/en/stable/history.html#v75-8-1
> Fix wheel file naming to follow binary distribution specification – by @di (#4766)

Today's spec:
https://packaging.python.org/en/latest/specifications/binary-distribution-format/#file-contents

Previously setuptools didn't follow the spec and maintainers couldn't use %pyproject_distinfo macro which normalizes names according to the specification.
https://www.altlinux.org/Python_packaging_guide#Metadata

Test rebuild of packages with the aforementioned version of setuptools leads to 241 new errors.
Comment 1 Stanislav Levin 2025-03-04 14:13:47 MSK
One of the possible options to handle this:

- add compat macro for setuptools-generated dist-info. It's either
  standard normalization (modern) or setuptools' one (legacy).
  The default can be switched depending on a branch (set by
  rpm-build-python3).
  - pros:
    - this allows to seamlessly copy packages between branches
  - cons:
    - need to maintain the macro and backport rpm-build-python3 to
      supported branches
    - need to take care of the default on setuptools backport
Comment 2 Grigory Ustinov 2025-03-04 23:02:21 MSK
Я уже говорил, что макрос про dist-info совсем неудачный оказался и в своих пакетах я его использую только если если забываю убрать после автогенерации спека.

Предлагаю не городить безумное количество макросов и общаться на языке большинства пользователей и участников тим.
Comment 3 Stanislav Levin 2025-03-05 12:34:23 MSK
(In reply to Grigory Ustinov from comment #2)
> Я уже говорил, что макрос про dist-info совсем неудачный оказался и в своих
> пакетах я его использую только если если забываю убрать после автогенерации
> спека.

Имя директории *.dist-info стандартизировано и все сборочные бэкенды следуют
этому стандарту, все кроме setuptools < 75.8.1 (так исторически сложилось).
То есть имя сгенерированной директорий фактически собранного
проекта должно совпадать (читать как assert) с ожидаемым %pyproject_distinfo.

Сейчас в случае с setuptools и проектами, имя которых не нормализуется согласно стандарту, имя dist-info жестко прибито гвоздями или "просто" заглобленно с "*". Например,
https://git.altlinux.org/gears/p/python3-module-zope.testrunner.git?p=python3-module-zope.testrunner.git;a=blob;f=.gear/zope.testrunner.spec;h=9714735fac8efa8174c5277e49e470fffcb86b0b;hb=f5ed172e958bbb6f238a68f96ad2477fe2f55709#l64

> %define pypi_name zope.testrunner
> %python3_sitelibdir/%pypi_name-%version.dist-info/

С setuptools >= 75.8.1, это ожидание будет сломано, потому что имя dist-info будет нормализовано согласно стандарту. В примере с zope.testrunner
это zope_testrunner-7.0.dist-info (. заменено на _).

То есть проблема не в использовании %pyproject_distinfo, а проблема в отсутствии соответствующего макроса для setuptools и его неиспользовании, что и привело к ручному заданию ожиданий. Сейчас можно было бы переключить нормализацию на стандартный вариант и не пришлось бы править какую-то часть из 241 спеков. Но имеем, что имеем, теперь придется поправить эти спеки, вопрос как именно.

1) меняем *.dist-info на %pyproject_distinfo и забываем про
особенности setuptools ... пока такие пакеты не понадобится скопировать в
бранчи с setuptools < 75.8.1, бэкпорт которого реалистичен для p11 и потребует
значительных усилий для всего остального.

2) делаем макрос для совместимости между бранчами с возможностью переключения реализации (sisyphus - standard, p11 - setuptools, p10 - setuptools, etc.).
Меняем *.dist-info на %pyproject_distinfo_setuptools_compat (просто например!),
бэкпортим rpm-build-python3. Пакеты можно копировать. Это более сложный вариант.
Comment 4 Grigory Ustinov 2025-03-06 08:47:06 MSK
(Ответ для Stanislav Levin на комментарий #3)
> С setuptools >= 75.8.1, это ожидание будет сломано, потому что имя dist-info
> будет нормализовано согласно стандарту. В примере с zope.testrunner
> это zope_testrunner-7.0.dist-info (. заменено на _).
> 
> То есть проблема не в использовании %pyproject_distinfo, а проблема в
> отсутствии соответствующего макроса для setuptools и его неиспользовании,
> что и привело к ручному заданию ожиданий. Сейчас можно было бы переключить
> нормализацию на стандартный вариант и не пришлось бы править какую-то часть
> из 241 спеков. Но имеем, что имеем, теперь придется поправить эти спеки,
> вопрос как именно.

Написать скрипт, который в автоматическом или полуавтоматическом режиме всё поправит. Если у вас на это не хватает квалификации, позвольте это сделать мне.