Bug 26297 - Gets wrong Requires from renamed imports
Summary: Gets wrong Requires from renamed imports
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build-python (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Nobody's working on this, feel free to take it
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-09-14 16:33 MSK by Vitaly Kuznetsov
Modified: 2011-09-16 07:14 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Kuznetsov 2011-09-14 16:33:37 MSK
$ 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.
Comment 1 real@altlinux.org 2011-09-15 06:35:49 MSK
А в чём ошибка? Вполне логично, что появляется зависимость. Другое дело, что мейнтейнер должен позаботиться, чтобы python2.6(builtins) появился в репозитории. Или я что-то не так понял?
Comment 2 Vitaly Kuznetsov 2011-09-15 08:22:12 MSK
Ошибка в том, что модуль builtins не нужен, механизмом переименования вместо него в приведённом мной куске кода грузится __builtin__ , никакой зависимости появляться не должно.

Попробуйте выполнить мой код, никакого сообщения о несуществующем модуле builtins вы не получите.

Данный приём штатно используется для написания кода, совместимого с python3, у нас же получаются нерезолвящиеся зависимости.
Comment 3 real@altlinux.org 2011-09-15 09:32:03 MSK
Я думаю, что зависимость появляется из-за "import builtins". Чтобы компьютеру объяснить, что зависимость такая не нужна, надо либо снабдить rpm-build-python искуственным интеллектом (тут я пас), либо в пакете, где используется такой код, сделать соответствующий Provides:

%py_provides builtins
Comment 4 Vitaly Kuznetsov 2011-09-15 10:27:28 MSK
Искусственный интеллект не нужен, нужно смотреть те модули, которые реально импортируются, а не просто "import xyz". Раз уж в питоне есть механизм переопределения импортируемых модулей.
Comment 5 Nick S. Grechukh 2011-09-15 13:24:07 MSK
(In reply to comment #3)
> искуственным интеллектом (тут я пас), либо в пакете, где используется такой
> код, сделать соответствующий Provides:
> 
> %py_provides builtins

ололо
Comment 6 Nick S. Grechukh 2011-09-15 13:26:51 MSK
(In reply to comment #1)
> Другое дело, что
> мейнтейнер должен позаботиться, чтобы python2.6(builtins) появился в
> репозитории. Или я что-то не так понял?

ололошеньки
Comment 7 Fr. Br. George 2011-09-15 16:02:28 MSK
(В ответ на комментарий №4)
> Искусственный интеллект не нужен, нужно смотреть те модули, которые реально
> импортируются, а не просто "import xyz". Раз уж в питоне есть механизм
> переопределения импортируемых модулей.

На синтаксическом уровне модификацию sys.modules отследить совсем непросто, мало ли, какое значение туда положат. А вот создать список таких переименований, необходимых для python3, и засунуть их в provides (в данном случае -- самому python), думаю, имеет смысл.