[devel] I: autoreqs in %_python3_path vs %_python3_compile_include

Ivan Zakharyaschev imz на altlinux.org
Вс Май 8 17:51:58 MSK 2016


Кортко мои рекомендайии сейчас такие:

Чтобы включить Python3 в нестандартных местах, добавляйте его в 
%_python3_path .

Чтобы отключить автокомпиляцию, добавляйте путь в 
%_python3_compile_exclude .

Чтобы отключить автопоиск зависимостей (или Provides), есть 
(соответственно) %_findreq_skiplist (или %_findprov_skiplist).

А %_python3_compile_include более внутренняя вещь, использовать не 
рекомендуется. Разница по сравнению с %_python3_path будет теперь в том, 
что питоновские автозависимости там не будут искаться. (Если нет других 
причин для этого, например, это не %_python3_path.)

Пример использования в python3.spec -- 
http://git.altlinux.org/people/imz/packages/python3.git?p=python3.git;a=blob;f=python3.spec;h=9d5b6d9ba34f2a810e4ad51c9c0d127708439a79;hb=HEAD#l109 
:

%add_python3_path %pylibdir
%add_python3_compile_exclude %pylibdir

нестандартный путь (не site-packages), но пусть сам python3 при сборке 
компилирует как хочет, мы не будем перекомпилировать.

http://git.altlinux.org/people/imz/packages/python3.git?p=python3.git;a=blob;f=python3.spec;h=9d5b6d9ba34f2a810e4ad51c9c0d127708439a79;hb=HEAD#l800 
:

# Skip the 2to3 test data (which might contain Python2 code)
%global lib2to3_tests %pylibdir/lib2to3/tests
%add_python3_compile_exclude %lib2to3_tests/data
%add_findreq_skiplist %lib2to3_tests/data/*
%add_findprov_skiplist %lib2to3_tests/data/*

(%add_python3_compile_exclude тут, конечно, эффекта не имеет, потому что 
есть глобальный exclude, но его могло бы и не быть.)

На примере gedit:

(Ещё одно пояснение: множества рядом с питоновскими завсимостями -- это 
множество нестандартных путей, по которым разрешено удовлетворять 
зависимость; т.е. чем больше множество, тем в большем кол-ве мест 
разрешено её искать; если только стандартные пути разрешены, то < 0 . 
Если у Provides нет множество, оно сможет удовлетворить любую 
зависимость. Это модуль по стандартному пути. Если есть множество -- 
здесь, в случае Provides, на самом деле, из одного элемента -- то 
удовлетворить соотвтетствующий Requires с < 0 не сможет, а сможет, если 
только поппадёт в множество нестандартных разрешёёных у соотв. Requires 
путей.)

Теперь можно использовать %%_python3_path вместо 
%%_python3_compile_include -- 
http://git.altlinux.org/people/imz/packages/gedit.git?p=gedit.git;a=commitdiff;h=85f11c9e317be5f12f067a6c07b0978f94764bad 
(при попытке навести порядок с autoreqs/provs сделал отличие, что в 
%%_python3_path питоновские зависимости ищутся, а в 
%%_python3_compile_include -- нет. Раньше по ошибке была такая ситуация, 
что они искались абы как: какие-то файлы считались Python3, какие-то нет, 
довольно случайно. Т.е. у кого-то чего-то не хватало, и это устраивало. А 
эти две переменные имели одинаковый эффект. Теперь, когда файлов 
выбирается больше, предусмотрел вариант такой ручки для тех, у кого раньше 
что-то не находилось и так устраивало.) С gedit всё нормально с полным 
поиском, я проверил сборку и так, и так. Ещё там адаптации spec-а, чтобы 
gear мог собирать -- 
http://git.altlinux.org/people/imz/packages/gedit.git?p=gedit.git;a=log , 
если интересно.

Без изменения на %_python3_path теперь так:

[imz на basalt RPM.gedit_compile_include]$ for f in 
gedit-3.20.1-alt1.1.x86_64.rpm; do TERM=dumb compare_packages -a 
--requires  --  /ALT/Sisyphus/x86_64/RPMS.classic/"$f" -- "$f" ; done
WARNING: terminal is not fully functional
--- /tmp/.private/imz/compare_packages.VREbwSKoGU/1     2016-05-08 
17:16:54.561976829 +0300
+++ /tmp/.private/imz/compare_packages.VREbwSKoGU/2     2016-05-08 
17:16:54.570976784 +0300
@@ -28,26 +28,9 @@
  libpthread.so.0(GLIBC_2.2.5)(64bit)
  libxml2.so.2()(64bit) >= 
set:okF4idxwhMYlKufqO128vgLfSEGptPVPyDTbElmLK1puQ
  libxml2.so.2(LIBXML2_2.4.30)(64bit)
-python3(codecs)
-python3(fcntl)
-python3(fnmatch)
-python3(functools)
-python3(hashlib)
-python3(inspect)
-python3(locale)
-python3(platform)
-python3(re)
-python3(shutil)
-python3(signal)
-python3(string)
-python3(subprocess)
-python3(tempfile)
-python3(traceback)
-python3(weakref)
-python3(xml)
+python3(inspect) <= set:ed50
  python3.5-ABI(64bit)
  rpmlib(PayloadIsLzma)
-rpmlib(SetVersions)
  rtld(GNU_HASH)
  typelib(GLib)
  typelib(GObject)
[imz на basalt RPM.gedit_compile_include]$

С изменением на %_python3_path -- по-старому:

[imz на basalt RPMS.hasher]$ for f in gedit-3.20.1-alt1.1.x86_64.rpm; do 
TERM=dumb compare_packages -a --requires  -- 
/ALT/Sisyphus/x86_64/RPMS.classic/"$f" -- "$f" ; done
WARNING: terminal is not fully functional
--- /tmp/.private/imz/compare_packages.sldjeD9soJ/1     2016-05-08 
17:18:14.995541561 +0300
+++ /tmp/.private/imz/compare_packages.sldjeD9soJ/2     2016-05-08 
17:18:15.005541511 +0300
@@ -28,26 +28,25 @@
  libpthread.so.0(GLIBC_2.2.5)(64bit)
  libxml2.so.2()(64bit) >= 
set:okF4idxwhMYlKufqO128vgLfSEGptPVPyDTbElmLK1puQ
  libxml2.so.2(LIBXML2_2.4.30)(64bit)
-python3(codecs)
-python3(fcntl)
-python3(fnmatch)
-python3(functools)
-python3(hashlib)
-python3(inspect)
-python3(locale)
-python3(platform)
-python3(re)
-python3(shutil)
-python3(signal)
-python3(string)
-python3(subprocess)
-python3(tempfile)
-python3(traceback)
-python3(weakref)
-python3(xml)
+python3(codecs) <= set:fea00
+python3(fcntl) <= set:fea00
+python3(fnmatch) <= set:fea00
+python3(functools) <= set:fea00
+python3(hashlib) <= set:fea00
+python3(inspect) <= set:fea00
+python3(locale) <= set:fea00
+python3(platform) <= set:fea00
+python3(re) <= set:fea00
+python3(shutil) <= set:fea00
+python3(signal) <= set:fea00
+python3(string) <= set:fea00
+python3(subprocess) <= set:fea00
+python3(tempfile) <= set:fea00
+python3(traceback) <= set:fea00
+python3(weakref) <= set:fea00
+python3(xml) <= set:fea00
  python3.5-ABI(64bit)
  rpmlib(PayloadIsLzma)
-rpmlib(SetVersions)
  rtld(GNU_HASH)
  typelib(GLib)
  typelib(GObject)
[imz на basalt RPMS.hasher]$

Про Provides в нестандартных путях:

[imz на basalt RPMS.hasher]$ fgrep non-std  ~/wip/gedit/gear-hsh.excl.log.1
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/__init__.py 
provides python3(externaltools) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/appactivatable.py 
provides python3(externaltools.appactivatable) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/capture.py 
provides python3(externaltools.capture) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/filelookup.py 
provides python3(externaltools.filelookup) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/functions.py 
provides python3(externaltools.functions) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/library.py 
provides python3(externaltools.library) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/linkparsing.py 
provides python3(externaltools.linkparsing) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/manager.py 
provides python3(externaltools.manager) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/outputpanel.py 
provides python3(externaltools.outputpanel) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/externaltools/windowactivatable.py 
provides python3(externaltools.windowactivatable) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/libdocinfo.so 
provides python3(libdocinfo) (under non-std path /usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/libfilebrowser.so 
provides python3(libfilebrowser) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/libmodelines.so 
provides python3(libmodelines) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/libsort.so provides 
python3(libsort) (under non-std path /usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/libspell.so provides 
python3(libspell) (under non-std path /usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/libtime.so provides 
python3(libtime) (under non-std path /usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/pythonconsole/__init__.py 
provides python3(pythonconsole) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/pythonconsole/config.py 
provides python3(pythonconsole.config) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/pythonconsole/console.py 
provides python3(pythonconsole.console) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/quickopen/__init__.py 
provides python3(quickopen) (under non-std path /usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/quickopen/popup.py 
provides python3(quickopen.popup) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/quickopen/virtualdirs.py 
provides python3(quickopen.virtualdirs) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/__init__.py 
provides python3(snippets) (under non-std path /usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/appactivatable.py 
provides python3(snippets.appactivatable) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/completion.py 
provides python3(snippets.completion) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/document.py 
provides python3(snippets.document) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/exporter.py 
provides python3(snippets.exporter) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/helper.py 
provides python3(snippets.helper) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/importer.py 
provides python3(snippets.importer) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/languagemanager.py 
provides python3(snippets.languagemanager) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/library.py 
provides python3(snippets.library) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/manager.py 
provides python3(snippets.manager) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/parser.py 
provides python3(snippets.parser) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/placeholder.py 
provides python3(snippets.placeholder) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/shareddata.py 
provides python3(snippets.shareddata) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/signals.py 
provides python3(snippets.signals) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/singleton.py 
provides python3(snippets.singleton) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/snippet.py 
provides python3(snippets.snippet) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/substitutionparser.py 
provides python3(snippets.substitutionparser) (under non-std path 
/usr/lib64/gedit/plugins)
/usr/src/tmp/gedit-buildroot/usr/lib64/gedit/plugins/snippets/windowactivatable.py 
provides python3(snippets.windowactivatable) (under non-std path 
/usr/lib64/gedit/plugins)
[imz на basalt RPMS.hasher]$ for f in gedit-3.20.1-alt1.1.x86_64.rpm; do 
TERM=dumb compare_packages -a --provides  -- 
/ALT/Sisyphus/x86_64/RPMS.classic/"$f" -- "$f" ; done
WARNING: terminal is not fully functional
--- /tmp/.private/imz/compare_packages.gyI8myKUIW/1     2016-05-08 
17:46:45.020000970 +0300
+++ /tmp/.private/imz/compare_packages.gyI8myKUIW/2     2016-05-08 
17:46:45.027000936 +0300
@@ -1,3 +1,43 @@
  gedit = 3.20.1-alt1.1
+python3(externaltools) = set:ed50
+python3(externaltools.appactivatable) = set:ed50
+python3(externaltools.capture) = set:ed50
+python3(externaltools.filelookup) = set:ed50
+python3(externaltools.functions) = set:ed50
+python3(externaltools.library) = set:ed50
+python3(externaltools.linkparsing) = set:ed50
+python3(externaltools.manager) = set:ed50
+python3(externaltools.outputpanel) = set:ed50
+python3(externaltools.windowactivatable) = set:ed50
  python3(gedit)
+python3(libdocinfo) = set:ed50
+python3(libfilebrowser) = set:ed50
+python3(libmodelines) = set:ed50
+python3(libsort) = set:ed50
+python3(libspell) = set:ed50
+python3(libtime) = set:ed50
+python3(pythonconsole) = set:ed50
+python3(pythonconsole.config) = set:ed50
+python3(pythonconsole.console) = set:ed50
+python3(quickopen) = set:ed50
+python3(quickopen.popup) = set:ed50
+python3(quickopen.virtualdirs) = set:ed50
+python3(snippets) = set:ed50
+python3(snippets.appactivatable) = set:ed50
+python3(snippets.completion) = set:ed50
+python3(snippets.document) = set:ed50
+python3(snippets.exporter) = set:ed50
+python3(snippets.helper) = set:ed50
+python3(snippets.importer) = set:ed50
+python3(snippets.languagemanager) = set:ed50
+python3(snippets.library) = set:ed50
+python3(snippets.manager) = set:ed50
+python3(snippets.parser) = set:ed50
+python3(snippets.placeholder) = set:ed50
+python3(snippets.shareddata) = set:ed50
+python3(snippets.signals) = set:ed50
+python3(snippets.singleton) = set:ed50
+python3(snippets.snippet) = set:ed50
+python3(snippets.substitutionparser) = set:ed50
+python3(snippets.windowactivatable) = set:ed50
  python3.3(gedit)
[imz на basalt RPMS.hasher]$

Может пригодиться. (Возникло на самом деле не столько из желания иметь 
такую фичу, а из необходимости навести порядок со списком файлов, в 
которых ищутся авто-Provides/Requires. Как я говорил, оно было абы как: 
большая часть файлов не попадала, потому что считалась Python2, при этом 
часть из нестандартных путей всё равно могла попасть. Так что если их 
оставлять при более тщательном обширном составлении списка, то их надо 
было как-то специально оформить, чтобы они не обманывали тех, что 
использует только стандартные пути.)

-- 
Best regards,
Ivan


Подробная информация о списке рассылки Devel