LINUX.ORG.RU

Вопрос по python-any-r1 / python_targets

 ,


0

1

Добрый вечер. Сейчас любой ebuild, который использует python-any-r1 и соответственно PYTHON_COMPAT/PYTHON_DEPS хочет поставить последнюю доступную версию интерпретатора, указанную в compat. При этом игнорируя PYTHON_TARGETS. (хотя как use они используются python_targets_pyton3_6 и версию 3.8 не требуют)

PYTHON_TARGETS="python3_6"
PYTHON_SINGLE_TARGET="python3_6"

Я прочитал /usr/portage/eclass/python-any-r1.eclass и думаю, что дальше делать. Маскировать версии, которые выше 3.6 или есть более простой способ?

★★★

Можно пример ebuild из дерева, который при указанных в нём 3.8 тянет его вместо использования установленного 3.6?

Версию 3.8 в юз флагах разве уже размаскировали?

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

upd: Забыл сказать ветка нестабильная ~amd64

emerge -pv mesa
These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  NS    ] dev-lang/python-3.8.2:3.8::gentoo [2.7.17:2.7::gentoo, 3.6.10:3.6/3.6m::gentoo] USE="ipv6 ncurses readline sqlite ssl xml -bluetooth -build -examples -gdbm -hardened -libressl -test -tk -wininst (-threads%*)" 17,461 KiB
[ebuild   R    ] media-libs/mesa-20.0.0::gentoo  USE="X dri3 egl gallium gbm gles2 vaapi zstd -classic -d3d9 -debug -gles1 -libglvnd -llvm -lm-sensors -opencl -osmesa (-selinux) -test -unwind -valgrind -vdpau -vulkan -vulkan-overlay -wayland -xa -xvmc" VIDEO_CARDS="nouveau (-freedreno) -i915 -i965 -intel -iris (-lima) (-panfrost) -r100 -r200 -r300 -r600 -radeon -radeonsi (-vc4) -virgl (-vivante) -vmware" 0 KiB

Total: 2 packages (1 in new slot, 1 reinstall), Size of downloads: 17,461 KiB

в ebuild вот этот блок

 BDEPEND="
 	${PYTHON_DEPS}
 	opencl? (
 		>=sys-devel/gcc-4.6
 	)
 	sys-devel/bison
 	sys-devel/flex
 	sys-devel/gettext
 	virtual/pkgconfig
 	$(python_gen_any_dep ">=dev-python/mako-0.8.0[\${PYTHON_USEDEP}]")
 "

Комментируем PYTHON_DEPS и emerge -pv уже не требует python3.8.

Дальше

emerge -pv libxcb::gentoo

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  NS    ] dev-lang/python-3.8.2:3.8::gentoo [2.7.17:2.7::gentoo, 3.6.10:3.6/3.6m::gentoo] USE="ipv6 ncurses readline sqlite ssl xml -bluetooth -build -examples -gdbm -hardened -libressl -test -tk -wininst (-threads%*)" 17,461 KiB
[ebuild     U  ] x11-libs/libxcb-1.14:0/1.12::gentoo [1.13.1:0/1.12::gentoo] USE="xkb -doc (-selinux) -static-libs -test" 430 KiB

Total: 2 packages (1 upgrade, 1 in new slot), Size of downloads: 17,891 KiB

Блок с PYTHON_DEPS

DEPEND="${RDEPEND}
	test? ( dev-libs/check[${MULTILIB_USEDEP}] )
	doc? ( app-doc/doxygen[dot] )
	dev-libs/libxslt
	${PYTHON_DEPS}
	$(python_gen_any_dep \
		">=x11-base/xcb-proto-1.14[${MULTILIB_USEDEP},\${PYTHON_USEDEP}]")"

Я не понимаю, почему именно эту версию он хочет(убирает только флаг threads). python_gen_any_dep чего-то химичит. Как оказалось не все ebuild’ы так себя ведут.

вот еще пример нашел

USE="fontforge" emerge -pv liberation-fonts

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] media-libs/libuninameslist-20091231-r1::gentoo  556 KiB
[ebuild  NS    ] dev-lang/python-3.7.6:3.7/3.7m::gentoo [2.7.17:2.7::gentoo, 3.6.10:3.6/3.6m::gentoo] USE="ipv6
ncurses readline sqlite ssl xml -bluetooth -build -examples -gdbm -hardened -libressl -test -tk -wininst (-threads%*)" 16,852 KiB
[ebuild  N     ] dev-python/fonttools-4.1.0::gentoo  USE="-test" PYTHON_TARGETS="python3_6 -python3_7" 2,201 KiB
[ebuild  N     ] media-gfx/fontforge-20190801::gentoo  USE="python readline unicode -X -cairo -gif -gtk -jpeg -png -svg -test -tiff -truetype-debugger" PYTHON_SINGLE_TARGET="python3_6 -python3_7" 20,280 KiB
[ebuild     U  ] media-fonts/liberation-fonts-2.1.0::gentoo [2.00.1-r3::gentoo] USE="fontforge* -X" 4,870 KiB

Total: 5 packages (1 upgrade, 3 new, 1 in new slot), Size of downloads: 44,758 KiB
arrecck ★★★
() автор топика
Последнее исправление: arrecck (всего исправлений: 1)
Ответ на: комментарий от arrecck

я посмотрел более детально (на примере mesa) Значит, PYTHON_DEPS (список берется из PYTHON_COMPAT)

|| ( dev-lang/python:3.8 dev-lang/python:3.7 dev-lang/python:3.6 )

Выбирается dev-lang/python:3.8(Если я правильно понимаю, косяк здесь).

Дальше python_gen_any_dep

>=dev-python/mako-0.8.0[python_targets_python3_6(-),python_single_target_python3_6(+)] 

В итоге две версии python(3.8 нахрен тут не сдалась)

['dev-lang/python:3.8', 'dev-lang/python:3.6', '>=dev-python/mako-0.8.0[python_targets_python3_6(-),python_single_target_python3_6(+)]']
arrecck ★★★
() автор топика
Ответ на: комментарий от arrecck

Недавно какой-то python eclass меняли, может косяк в нём, а может неверно применяют функцию из него. Лучше в багзиллу отпишись.

Может я такое не замечал потому, что 3.8 у меня установлен был для целей тестирования.

Меня смущает обратный слэш здесь

$(python_gen_any_dep ">=dev-python/mako-0.8.0[\${PYTHON_USEDEP}]")
 "

Как и повторение двойных кавычек внутри уже открытых двойных вместо '.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)
Ответ на: комментарий от arrecck

Забыл сказать ветка нестабильная ~amd64

Может потому что ветка нестабильная, ну он и хочет задел самый новый притянуть? Он же any.

grem ★★★★★
()
Ответ на: комментарий от grem

спасибо, вообщем я разобрался. python-r1 и python-any-r1 отличаются реализацией функции python*_set_globals. В python-any-r1 все поддерживаемые реализации будут установлены. Пример.

# Copyright 2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

DESCRIPTION=""
HOMEPAGE=""
SRC_URI=""

LICENSE=""
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""

# python-any-r1.eclass (Два таких выражения заставят portage ставить все перечисленные версии python'a)
DEPEND="
		|| ( dev-lang/python:3.8 dev-lang/python:3.7 dev-lang/python:3.6 )
		|| ( ( dev-lang/python:3.8 >=dev-python/mako-0.8.0 ) ( dev-lang/python:3.7 >=dev-python/mako-0.8.0 ) ( dev-lang/python:3.6 >=dev-python/mako-0.8.0 ) )

"

# python-r1.eclass
# DEPEND="
# 		python_targets_python3_6? ( dev-lang/python:3.6 ) python_targets_python3_7? ( dev-lang/python:3.7 ) python_targets_python3_8? ( dev-lang/python:3.8 ) >=dev-lang/python-exec-2:=[python_targets_python3_6(-)?,python_targets_python3_7(-)?,python_targets_python3_8(-)?,-python_single_target_python3_6(-),-python_single_target_python3_7(-),-python_single_target_python3_8(-)]
# 		|| ( ( dev-lang/python:3.8 >=dev-python/mako-0.8.0 ) ( dev-lang/python:3.7 >=dev-python/mako-0.8.0 ) ( dev-lang/python:3.6 >=dev-python/mako-0.8.0 ) )
# "
RDEPEND="${DEPEND}"
BDEPEND=""

И похоже это не баг, а фича.В том же eclass’e такой коммент.

# A minimal eclass for packages which need any Python interpreter
# installed without a need for explicit choice and invariability.
# This usually involves packages requiring Python at build-time
# but having no other relevance to it.
#
# This eclass provides a minimal PYTHON_DEPS variable with a dependency
# string on any of the supported Python implementations. It also exports
# pkg_setup() which finds the best supported implementation and sets it
# as the active one.

Для себя я замаскировал версии старше 3.6. Решено

arrecck ★★★
() автор топика
Ответ на: комментарий от arrecck

Я просто на стабильной ветке системных пакетов сижу и размаскировываю отдельные прикладные софтины. А так как мне ещё и тестировать надо было сборки для python 3.6 - 3.8, то я их все держу, но в eselect python основной 3.6 включен, как и в тагертсах.

grem ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.