Bug 28606 - способ выключить rpm-build-python
Summary: способ выключить rpm-build-python
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-02-26 19:26 MSK by Yuri N. Sedunov
Modified: 2016-03-10 01:07 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 Yuri N. Sedunov 2013-02-26 19:26:06 MSK
Наступает эра python3 и от rpm-build-python, который неизбежно оказывается в сборочной системе, практически невозможно предохраниться. Необходимо иметь способ отключить rpm-build-python вообще, либо оторвать его от rpm-build.
Comment 1 Dmitry V. Levin 2013-02-26 19:36:44 MSK
python.{req,prov} отключается обычным nopython'ом.
А весь rpm-build-python зачем отключать?
Comment 2 Yuri N. Sedunov 2013-02-26 19:51:39 MSK
(In reply to comment #1)
> python.{req,prov} отключается обычным nopython'ом.
> А весь rpm-build-python зачем отключать?

Затем, что он лезет компилять и вычислять зависимости в python3-файлы. Нужен глобальный рубильник.
Comment 3 Dmitry V. Levin 2013-02-26 20:01:00 MSK
(In reply to comment #2)
> (In reply to comment #1)
> > python.{req,prov} отключается обычным nopython'ом.
> > А весь rpm-build-python зачем отключать?
> 
> Затем, что он лезет компилять и вычислять зависимости в python3-файлы.

Он вряд ли станет смотреть на python3-файлы, находящиеся в отведенных для них частях файловой системы.  Есть пример, когда это работает неправильно?

> Нужен глобальный рубильник.

Напротив, автоматика должна работать сама.
Comment 4 Yuri N. Sedunov 2013-02-26 20:10:49 MSK
(In reply to comment #3)
> (In reply to comment #2)
> > (In reply to comment #1)
> > > python.{req,prov} отключается обычным nopython'ом.
> > > А весь rpm-build-python зачем отключать?
> > 
> > Затем, что он лезет компилять и вычислять зависимости в python3-файлы.
> 
> Он вряд ли станет смотреть на python3-файлы, находящиеся в отведенных для них
> частях файловой системы.  Есть пример, когда это работает неправильно?
>
Про отведенные места, разумеется, и речи нет.
 
> > Нужен глобальный рубильник.
> 
> Напротив, автоматика должна работать сама.

Как в нештатных местах будет работать автоматика?
Comment 5 Dmitry V. Levin 2013-02-26 20:31:23 MSK
(In reply to comment #4)
> (In reply to comment #3)
> > (In reply to comment #2)
> > > (In reply to comment #1)
> > > > python.{req,prov} отключается обычным nopython'ом.
> > > > А весь rpm-build-python зачем отключать?
> > > 
> > > Затем, что он лезет компилять и вычислять зависимости в python3-файлы.
> > 
> > Он вряд ли станет смотреть на python3-файлы, находящиеся в отведенных для них
> > частях файловой системы.  Есть пример, когда это работает неправильно?
> >
> Про отведенные места, разумеется, и речи нет.
> 
> > > Нужен глобальный рубильник.
> > 
> > Напротив, автоматика должна работать сама.
> 
> Как в нештатных местах будет работать автоматика?

Для нештатных случаев есть рубильники вроде
AutoReqProv: nopython
и
%define __python %nil

Но если таких случаев перестанет быть мало, значит, надо автоматику совершенствовать.
Comment 6 Yuri N. Sedunov 2013-02-26 20:57:52 MSK
(In reply to comment #5)
> 
> Для нештатных случаев есть рубильники вроде
Таких "нештатных" ситуаций будет больше и больше.

> AutoReqProv: nopython
> и
> %define __python %nil

Эти два заклинания следует объединить в одно типа %nopython или %nopython2 -- на сейчас устроит. 

> Но если таких случаев перестанет быть мало, значит, надо автоматику
> совершенствовать.
Comment 7 Dmitry V. Levin 2013-02-26 21:11:43 MSK
(In reply to comment #6)
> (In reply to comment #5)
> > 
> > Для нештатных случаев есть рубильники вроде
> Таких "нештатных" ситуаций будет больше и больше.

Почему?  Может, примеры есть какие-нибудь?
Comment 8 Yuri N. Sedunov 2013-02-26 21:27:54 MSK
(In reply to comment #7)
> (In reply to comment #6)
> > (In reply to comment #5)
> > > 
> > > Для нештатных случаев есть рубильники вроде
> > Таких "нештатных" ситуаций будет больше и больше.
> 
> Почему?  Может, примеры есть какие-нибудь?

Вот, сейчас собираю новые gedit и gedit-plugins, -- штепсели, написанные на третьем питоне, разложены по папкам в /usr/lib/gedit. Следующий будет totem, видимо с такой же иерархией плагинов.
Comment 9 Repository Robot 2013-04-07 02:44:40 MSK
rpm-build-python-0.36.2-alt1 -> sisyphus:

* Sat Apr 06 2013 Dmitry V. Levin <ldv@altlinux> 0.36.2-alt1
- python.compileall.py:
  + removed python version <= 2.2 py_compile workaround;
  + fixed file executability check (by iv@).
- python.{prov,req}.files:
  + enhanced "python script text executable" type check;
  + added is_python3_path check from python.{prov,req}.py,
    which is now applied only to files of uncertain type.
- python.{prov,req}.py: removed is_python3 check.
- brp-bytecompile_python:
  added $RPM_PYTHON3_COMPILE_INCLUDE to the exclude list (closes: #28606).
Comment 10 Dmitry V. Levin 2013-04-07 03:05:12 MSK
(In reply to comment #6)
> (In reply to comment #5)
> > 
> > Для нештатных случаев есть рубильники вроде
> Таких "нештатных" ситуаций будет больше и больше.
> 
> > AutoReqProv: nopython
> > и
> > %define __python %nil
> 
> Эти два заклинания следует объединить в одно типа %nopython или %nopython2 --
> на сейчас устроит.

Недостаточно выключить один питон, надо ведь еще и включить на полную катушку другой питон.  Не представляю себе ни интерфейса, ни реализации подобного трюка.

> Вот, сейчас собираю новые gedit и gedit-plugins, -- штепсели, написанные на
> третьем питоне, разложены по папкам в /usr/lib/gedit. Следующий будет totem,
> видимо с такой же иерархией плагинов.

С теми изменениями, которые сейчас в Сизифе, достаточно было бы написать:
%add_python3_compile_include /usr/lib/gedit
Этого достаточно, чтобы, с одной стороны, скрипты python2 утратили интерес к /usr/lib/gedit, и, с другой стороны, скрипты python3 сделали с /usr/lib/gedit все, что они считают нужным.
Comment 11 Ivan Zakharyaschev 2016-03-09 16:49:49 MSK
Сейчас используется скрипт без этой фичи:

[root@c253 ~]# rpm -qf /usr/lib/rpm/brp.d/072-bytecompile_python.brp 
rpm-build-4.0.4-alt100.88
[root@c253 ~]# fgrep -i python3 /usr/lib/rpm/brp.d/072-bytecompile_python.brp 
[root@c253 ~]# 

Так и задумано?

Я так понимаю, для сборки gedit автоматику как-то насильно вырубили (ведь на эту фичи нельзя полагаться), потому что он даже не делает попытки компилировать python-ом (не 3):

$ fgrep Bytecompiling /beehive/logs/Sisyphus-x86_64/latest/success/gedit-* 
/beehive/logs/Sisyphus-x86_64/latest/success/gedit-3.18.3-alt1:Bytecompiling python3 modules in /usr/src/tmp/gedit-buildroot using python3
/beehive/logs/Sisyphus-x86_64/latest/success/gedit-3.18.3-alt1:Bytecompiling python3 modules with optimization in /usr/src/tmp/gedit-buildroot using python3 -O
/beehive/logs/Sisyphus-x86_64/latest/success/gedit-plugins-3.18.0-alt1:Bytecompiling python3 modules in /usr/src/tmp/gedit-plugins-buildroot using python3
/beehive/logs/Sisyphus-x86_64/latest/success/gedit-plugins-3.18.0-alt1:Bytecompiling python3 modules with optimization in /usr/src/tmp/gedit-plugins-buildroot using python3 -O
/beehive/logs/Sisyphus-x86_64/latest/success/gedit-plugins-latex-3.4.1-alt1:Bytecompiling python modules in /usr/src/tmp/gedit-plugins-latex-buildroot using /usr/bin/python
/beehive/logs/Sisyphus-x86_64/latest/success/gedit-plugins-latex-3.4.1-alt1:Bytecompiling python modules with optimization in /usr/src/tmp/gedit-plugins-latex-buildroot using /usr/bin/python -O

Только для gedit-plugins-latex наоборот: там про python3 не знают. Зато python работает. (Тоже странно, что разные версии плагинов к одной программе...)
Comment 12 Ivan Zakharyaschev 2016-03-10 00:57:30 MSK
Если бы не george@ полез смотреть скрипт у себя, я бы так и продолжил читать неактивную версию из rpm-build-python и не понимать, почему оно не действует.
Comment 13 Repository Robot 2016-03-10 01:07:22 MSK
rpm-4.0.4-alt100.89 -> sisyphus:

* Wed Mar 09 2016 Dmitry V. Levin <ldv@altlinux> 4.0.4-alt100.89
- brp-bytecompile_python: exclude paths listed
  in $RPM_PYTHON3_COMPILE_INCLUDE (ALT#28606).
- ldd: pass --list to rtld.