Кортко мои рекомендайии сейчас такие: Чтобы включить 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