$ cat /tmp/1.py import sys import imp sys.modules['builtins'] = imp.load_module('__builtin__', *imp.find_module('__builtin__')) import builtins $ python /tmp/1.py $ $ /usr/lib/rpm/python.req /tmp/1.py python2.6(builtins) This leads to unresolved python2.6(builtins) requirement which does not exist.
А в чём ошибка? Вполне логично, что появляется зависимость. Другое дело, что мейнтейнер должен позаботиться, чтобы python2.6(builtins) появился в репозитории. Или я что-то не так понял?
Ошибка в том, что модуль builtins не нужен, механизмом переименования вместо него в приведённом мной куске кода грузится __builtin__ , никакой зависимости появляться не должно. Попробуйте выполнить мой код, никакого сообщения о несуществующем модуле builtins вы не получите. Данный приём штатно используется для написания кода, совместимого с python3, у нас же получаются нерезолвящиеся зависимости.
Я думаю, что зависимость появляется из-за "import builtins". Чтобы компьютеру объяснить, что зависимость такая не нужна, надо либо снабдить rpm-build-python искуственным интеллектом (тут я пас), либо в пакете, где используется такой код, сделать соответствующий Provides: %py_provides builtins
Искусственный интеллект не нужен, нужно смотреть те модули, которые реально импортируются, а не просто "import xyz". Раз уж в питоне есть механизм переопределения импортируемых модулей.
(In reply to comment #3) > искуственным интеллектом (тут я пас), либо в пакете, где используется такой > код, сделать соответствующий Provides: > > %py_provides builtins ололо
(In reply to comment #1) > Другое дело, что > мейнтейнер должен позаботиться, чтобы python2.6(builtins) появился в > репозитории. Или я что-то не так понял? ололошеньки
(В ответ на комментарий №4) > Искусственный интеллект не нужен, нужно смотреть те модули, которые реально > импортируются, а не просто "import xyz". Раз уж в питоне есть механизм > переопределения импортируемых модулей. На синтаксическом уровне модификацию sys.modules отследить совсем непросто, мало ли, какое значение туда положат. А вот создать список таких переименований, необходимых для python3, и засунуть их в provides (в данном случае -- самому python), думаю, имеет смысл.