Зачем у меня стоит две версии питона?

Sabayon, Calculate, Funtoo, Exherbo

Модератор: /dev/random

Shushandr
Сообщения: 86
ОС: Gentoo

Зачем у меня стоит две версии питона?

Сообщение Shushandr »

Код: Выделить всё

# eselect python list
Available Python interpreters, in order of preference:
  [1]   python3.12
  [2]   python3.11 (fallback)
# emerge -a --unmerge python
 * This action can remove important packages! In order to be safer, use
 * `emerge -pv --depclean <atom>` to check for reverse dependencies before
 * removing packages.

>>> These are the packages that would be unmerged:
 * Not unmerging package dev-lang/python-3.11.6 since there is no valid reason
 * for Portage to unmerge currently used Python interpreter.

 dev-lang/python
    selected: 3.12.0_p1 
   protected: 3.11.6 
     omitted: none 

All selected packages: =dev-lang/python-3.12.0_p1

>>> 'Selected' packages are slated for removal.
>>> 'Protected' and 'omitted' packages will not be removed.

Would you like to unmerge these packages? [Yes/No] ^CInterrupted.
# python --version
Python 3.12.0
Он пишет, что версия 3.11 не удаляется, потому что она используемая. Но я проверил версию и это неправда - используемая версия 3.12. Почему бы версию 3.11 не удалить? Ладно, допустим, что причина есть. Почему портаж не пишет - какая?

Написал то, что он просит:

Код: Выделить всё

# emerge -pv --depclean =dev-lang/python-3.11.6

Calculating dependencies... done!
  dev-lang/python-3.11.6 pulled in by:
    app-crypt/gcr-3.41.1-r2 requires dev-lang/python:3.11
    app-crypt/mit-krb5-1.20.1 requires dev-lang/python:3.11
    app-portage/gemato-20.5 requires dev-lang/python:3.11[threads(+)]
    app-text/iso-codes-4.15.0 requires dev-lang/python:3.11
    dev-libs/glib-2.76.4 requires dev-lang/python:3.11[xml(+)]
    dev-libs/gobject-introspection-1.76.1 requires dev-lang/python:3.11[xml(+)]
    dev-libs/icu-73.2 requires dev-lang/python:3.11
    dev-libs/libevdev-1.13.1 requires dev-lang/python:3.11
    dev-libs/libgusb-0.4.6 requires dev-lang/python:3.11[xml(+)]
    dev-libs/libxml2-2.11.5 requires dev-lang/python:3.11[xml(+)]
    dev-python/PySocks-1.7.1-r2 requires dev-lang/python:3.11
    dev-python/certifi-3021.3.16-r4 requires dev-lang/python:3.11
    dev-python/charset-normalizer-3.3.2 requires dev-lang/python:3.11
    dev-python/idna-3.4 requires dev-lang/python:3.11
    dev-python/requests-2.31.0 requires dev-lang/python:3.11[threads(+)]
    dev-python/urllib3-2.1.0 requires dev-lang/python:3.11[ssl(+)]
    media-libs/fontconfig-2.14.2-r3 requires dev-lang/python:3.11
    media-libs/graphene-1.10.8 requires dev-lang/python:3.11
    media-libs/libepoxy-1.5.10-r2 requires dev-lang/python:3.11[xml(+)]
    media-libs/libglvnd-1.7.0 requires dev-lang/python:3.11
    media-libs/mesa-23.1.9 requires dev-lang/python:3.11
    media-libs/opus-1.4 requires dev-lang/python:3.11
    net-fs/cifs-utils-7.0 requires dev-lang/python:3.11
    net-fs/samba-4.18.8 requires dev-lang/python:3.11[threads(+),xml(+)]
    sys-apps/portage-3.0.51 requires dev-lang/python:3.11[ssl(+)], dev-lang/python:3.11[bzip2(+),threads(+)]
    sys-apps/systemd-254.5-r1 requires dev-lang/python:3.11
    sys-auth/pambase-20220214 requires dev-lang/python:3.11
    sys-devel/clang-16.0.6 requires dev-lang/python:3.11
    sys-libs/glibc-2.37-r7 requires dev-lang/python:3.11
    sys-libs/ldb-2.7.2 requires dev-lang/python:3.11[threads(+)]
    sys-libs/talloc-2.4.0 requires dev-lang/python:3.11[threads(+)]
    sys-libs/tdb-1.4.8 requires dev-lang/python:3.11[threads(+)]
    sys-libs/tevent-0.14.1 requires dev-lang/python:3.11[threads(+)]

>>> No packages selected for removal by depclean
Packages installed:   582
Packages in world:    1
Packages in system:   49
Required packages:    582
Number to remove:     0
Вопрос - а почему, собственно, он не обновляет все эти пакеты на использование python-3.12 ?

Отредактировал файл /etc/python-exec/python-exec.conf, вписал туда:

Код: Выделить всё

python3.12
-python3.11
стало показывать:

Код: Выделить всё

# eselect python list
Available Python interpreters, in order of preference:
  [1]   python3.12
  [2]   python3.11 (disabled)
# emerge --unmerge =dev-lang/python-3.11
emerge: no python-exec wrapped executable found in /usr/lib/python-exec.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение /dev/random »

Shushandr писал:
07.12.2023 14:11
Вопрос - а почему, собственно, он не обновляет все эти пакеты на использование python-3.12 ?
Поддержка новых версий python добавляется разработчиками дистрибутива в пакеты по мере их тестирования на совместимость с новой версией. Пакет за пакетом. Эта поддержка при добавлении отключается по умолчанию, поскольку сборка разных пакетов с разными версиями python часто приводит к проблемам. После того, как ВСЕ СУЩЕСТВУЮЩИЕ пакеты из категорий "поддержка нового python не протестирована" и "поддержка пока глючит, надо ждать новой версии пакета от апстрима" переходят в категории "поддерживается нормально" и "не поддерживается и не будет", пакеты из последней категории удаляют из дистрибутива, а все остальные переводят на новую версию.
Спасибо сказали:
Shushandr
Сообщения: 86
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение Shushandr »

Это общие соображения. Вы же не проверили каждый из этих пакетов. И я не проверил. Ваше соображение верно вообще, но может быть неверно в этом конкретном случае. Пакеты же стабилизировали эти все, значит всё уже спортировано на новую версию питона.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение /dev/random »

Shushandr писал:
07.12.2023 14:11
Отредактировал файл /etc/python-exec/python-exec.conf, вписал туда:
Возвращайте обратно. Этот файл указывает, какую версию питона использовать при запуске, а не с поддержкой какой версии собирать. Если вы попытаетесь запустить пакет с версией, поддержка которой не была установлена, он не запустится. Что и произошло у вас с emerge. Он просто не запустился, т.к. вы пытаетесь использовать для его запуска python 3.12, а он был установлен с поддержкой только 3.11.
Добавлено (14:37):
Shushandr писал:
07.12.2023 14:35
Пакеты же стабилизировали эти все, значит всё уже спортировано на новую версию питона.
Не значит.
Спасибо сказали:
Shushandr
Сообщения: 86
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение Shushandr »

/dev/random писал:
07.12.2023 14:37
Возвращайте обратно. Этот файл указывает, какую версию питона использовать при запуске
Это негентувейно. Для указания, что использовать, должна использоваться фича Alternatives.

Не должно вообще быть файлов, которые редактируются руками, иначе сетап невоспроизводим конфигурированием.
/dev/random писал:
07.12.2023 14:37
Не значит.
Тогда надо .ebuild-файлы писать как-то по-другому. Чтобы в стабилизированной версии пакета явно указывалась верхняя протестированная граница каждой зависимости, а в нестабильной версии пакета было бы другое ограничение. Это, конечно, затруднит обновления билдов.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение /dev/random »

Shushandr писал:
07.12.2023 14:44
Это негентувейно. Для указания, что использовать должна использоваться фича Alternatives.

Не должно вообще быть файлов, которые редактируются руками, иначе сетап невоспроизводим конфигурированием.
Вы сами решили отредактировать его руками. Вас никто не заставлял. Обычно этот файл редактируется через eselect python.
Shushandr писал:
07.12.2023 14:44
Чтобы в стабилизированной версии пакета явно указывалась верхняя протестированная граница каждой зависимости, а в нестабильной версии пакета было бы другое ограничение.
Какое другое ограничение? В каждом ебилде питоновых пакетов указывается список версий питона, с которыми именно этот ебилд именно этой версии протестирован. Какое другое ограничение вы предлагаете?
Спасибо сказали:
Shushandr
Сообщения: 86
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение Shushandr »

Я не могу собрать portage под python 12, потому что этот USE-флаг выключен и в круглых скобочках (т.е. и не включится (замаскирован?)):

Код: Выделить всё

[ebuild   R    ] sys-apps/portage-3.0.51::gentoo  USE="(ipc) native-extensions rsync-verify xattr -apidoc -build -doc -gentoo-dev (-selinux) -test" PYTHON_TARGETS="python3_11 (-pypy3) -python3_10 (-python3_12)" 0 KiB
Из-за этого у меня отсутствует файл /usr/lib/python-exec/python3.12/emerge:

Код: Выделить всё

/usr/lib/python-exec # find . -iname emerge
./python3.11/emerge
что и приводит к ошибке при запуске emerge:

Код: Выделить всё

# emerge --version
emerge: no python-exec wrapped executable found in /usr/lib/python-exec.
вместо

Код: Выделить всё

# emerge --version
Portage 3.0.51 (python 3.11.6-final-0, default/linux/amd64/17.1/desktop/gnome/systemd, gcc-13, glibc-2.37-r7, 5.15.80-gentoo-x86_64 x86_64)
В каждом ебилде питоновых пакетов указывается список версий питона, с которыми именно этот ебилд именно этой версии протестирован.
Такая техника использования USE-флагов должна быть описана в полном объёме. Что надо прочитать?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение /dev/random »

Shushandr писал:
07.12.2023 15:01
замаскирован?
Замаскирован в стабильной ветке, т.е. для пакетов, не перечисленных в package.accept_keywords. Размаскируют, когда будут готовы переводить на него стабильную ветку. Если попытаетесь размаскировать сами, можете столкнуться с проблемами, когда в каком-то пакете версия с поддержкой python 3.12 уже стабилизирована, а в его зависимости - нет, и portage не сможет обновить систему, ругаясь на невыполнимые зависимости.
Добавлено (15:16):
Shushandr писал:
07.12.2023 15:01
что и приводит к ошибке при запуске emerge:
Да отменяйте вы уже ваши изменения в файле /etc/python-exec/python-exec.conf. Gentoo ещё не готов переходить на 3.12.
Спасибо сказали:
Shushandr
Сообщения: 86
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение Shushandr »

/dev/random писал:
07.12.2023 15:13
Замаскирован в стабильной ветке
Gentoo ещё не готов переходить на 3.12.
Я не понимаю, что там написано:

Код: Выделить всё

/var/db/repos/gentoo/profiles/base/use.stable.mask

# Michał Górny <mgorny@gentoo.org> (2023-05-23)
# Mask until dev-lang/python:3.12 becomes stable.
python_targets_python3_12
python_single_target_python3_12
Но ведь пакет-то dev-lang/python:3.12 как раз стал помечен как стабилизированный, значит условие размаскировки либо уже выполнено, либо они вводят в заблуждение этим комментарием и имеется в виду какое-то другое значение слов "becomes stable". Вот это всё надо разъяснять в документации про этот сценарий использования. Где она, документация про использование USE-флагов для слотирования?

Вот тоже непонятное:

Код: Выделить всё

/var/db/repos/gentoo/profiles/base/package.use.stable.mask

# Michał Górny <mgorny@gentoo.org> (2023-10-18)
# Unblock the support in python-exec while the target is masked.
dev-lang/python-exec -python_targets_python3_12
Как он может отблокировать флаг для отдельного пакета, если он его только что выше заблокировал флаг глобально? Если ему так можно, то мне можно тоже? Где об этом написано (не о порядке вычисления флагов, а о том, что можно и нужно так делать в каких сценариях)?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение /dev/random »

Shushandr писал:
07.12.2023 15:32
Но ведь пакет-то dev-lang/python:3.12 как раз стал помечен как стабилизированный
Они плохо выразились. Имелось в виду, что его поддержка в дистрибутиве должна стабилизироваться. Если что, вот трекер оставшихся проблем: https://bugs.gentoo.org/918858
Shushandr писал:
07.12.2023 15:32
Как он может отблокировать флаг для отдельного пакета, если он его только что выше заблокировал флаг глобально?
Так же, как вы включаете для отдельных пакетов через package.use флаги, которые выключили глобально через make.conf или через */*.
Shushandr писал:
07.12.2023 15:32
Где об этом написано (не о порядке вычисления флагов, а о том, что можно и нужно так делать в каких сценариях)?
Где-то в документации для разработчиков gentoo, скорее всего. В отличие от размаскировки пакетов, размаскировка флагов конечным пользователем официально не поддерживается. Это фича для разработчиков.
Спасибо сказали:
Shushandr
Сообщения: 86
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение Shushandr »

вы ... use флаги ... выключили глобально
Я таким не занимаюсь. Не выключаю флаги глобально, и вообще за философию конструктивизма.
Это фича для разработчиков
Итак, правильный ответ на исходный вопрос звучит так: две версии питона на всех машинах по всему миру у всех пользователей потребляя терабайты дискового пространства
стоят для того, чтобы нескольким разработчикам генты было удобно переползать на новую версию питона
(это вместо того, чтобы размаскировать у разработчиков локально и тестировать у разработчиков локально).
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение /dev/random »

Shushandr писал:
07.12.2023 15:51
две версии питона на всех машинах по всему миру у всех пользователей потребляя терабайты дискового пространства
Судя по вашему первому сообщению, он вам предложил удалить 3.12. Так была бы только одна версия, 3.11.

(Но не удивлюсь, если вы своими последующими манипуляциями сделали обе версии обязательными. У меня, например, обе обязательны.)
Спасибо сказали:
Kopilov
Сообщения: 953
ОС: [K]Ubuntu, Debian

Re: Зачем у меня стоит две версии питона?

Сообщение Kopilov »

/dev/random писал:
07.12.2023 15:13
Gentoo ещё не готов переходить на 3.12.
А что, там именно на этой версии что-то глобально сломали? Или типичный rolling?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5364
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение /dev/random »

Kopilov писал:
07.12.2023 16:16
А что, там именно на этой версии что-то глобально сломали? Или типичный rolling?
Ничего особенного с этой версией, это происходит при каждой смене ветки питона.
Спасибо сказали:
Shushandr
Сообщения: 86
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение Shushandr »

> он вам предложил удалить 3.12

да это ладно (что предложил удалить), как она изначально там установилась эта версия, если она никому не нужна?

Код: Выделить всё

World set (Portage) — encompasses the system set, the selected set, and the @profile set.
...
The system packages are defined by the Gentoo profiles (through the packages files).
оттуда

Ищем эти packages-файлы:

Код: Выделить всё

/var/db/repos/gentoo # find . -iname packages
./profiles/arch/hppa/packages
./profiles/arch/powerpc/packages
./profiles/arch/powerpc/ppc64/32ul/packages
./profiles/arch/riscv/packages
./profiles/arch/s390/packages
./profiles/arch/sparc/packages
./profiles/base/packages
./profiles/default/linux/packages
./profiles/embedded/packages
./profiles/features/hardened/packages
./profiles/features/musl/packages
./profiles/features/prefix/rpath/packages
./profiles/features/prefix/standalone/packages
./profiles/features/prefix/packages
./profiles/features/selinux/packages
./profiles/features/llvm/packages
./profiles/prefix/darwin/macos/features/fsf-gcc-ld64/packages
./profiles/prefix/darwin/macos/features/fsf-gcc-nold/packages
./profiles/prefix/darwin/macos/packages
./profiles/prefix/darwin/packages
./profiles/prefix/linux/packages
./profiles/prefix/linux/ppc64/packages
./profiles/prefix/linux/ppc64le/packages
./profiles/prefix/linux/riscv/packages
./profiles/prefix/packages
./profiles/prefix/sunos/packages
./profiles/prefix/sunos/solaris/5.11/packages
Там ищем python. не находим. Но почему-то он мёржится:

Код: Выделить всё

# emerge -pve --ignore-world @system | grep dev-lang/python
[ebuild   R    ] dev-lang/python-exec-conf-2.4.6:2::gentoo  PYTHON_TARGETS="python3_11 (-pypy3) -python3_10 (-python3_12)" 0 KiB
[ebuild   R    ] dev-lang/python-exec-2.4.10:2::gentoo  USE="(native-symlinks) -test" PYTHON_TARGETS="(pypy3) (python3_10) (python3_11) (python3_12)" 0 KiB
[ebuild   R    ] dev-lang/python-3.12.0_p1:3.12::gentoo  USE="ensurepip gdbm ncurses readline sqlite ssl tk -bluetooth -build -debug -examples -libedit -lto -pgo -test -valgrind -verify-sig" 0 KiB
Если его удалить, то он устанавливается обратно:

Код: Выделить всё

# emerge -puvDN @world | grep dev-lang/python
[ebuild  NS    ] dev-lang/python-3.12.0_p1:3.12::gentoo [3.11.6:3.11::gentoo] USE="ensurepip gdbm ncurses readline sqlite ssl tk -bluetooth -build -debug -examples -libedit -lto -pgo -test -valgrind -verify-sig" 0 KiB
Значит кому-то она всё-таки нужна. Осталось только описать словами, что же происходит на самом деле.
Спасибо сказали:
Аватара пользователя
yoricI
Сообщения: 2599
ОС: gentoo fluxbox

Re: Зачем у меня стоит две версии питона?

Сообщение yoricI »

А если так посмотреть?

Код: Выделить всё

equery d dev-lang/python-3.12
Спасибо сказали:
Shushandr
Сообщения: 86
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение Shushandr »

Моя цель состоит не в том, чтобы удалить пакет python-3.12
Мне нужно словесное описание того что происходит. Я об этом третий раз говорю.
Так-то понятно, что люди в обществе на разных ступенях развития, и некоторые обезьяны не могут выражать мысли словами. Как правило это разработчики.

здесь мы видим, что отрицается понятие "стабилизация пакетов" и ему приходит на смену "стабилизированный пакет с нестабилизированным таргетом". Если раньше было нельзя просто взять и стабилизировать пакет без того, чтобы не сломать что-нибудь в дереве, то теперь можно.

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

Может быть дело в том, что пакеты бывают разных типов? или зависимости у них разных видов?
Если бы это было так, то можно было бы говорить о том, что стабилизация таргета происходит когда все пакеты какого-то вида заявили поддержку таргета и стабилизировались. Но я пока не вижу, как на самом деле. Пакетов неограниченно много. Получается, что целью введения этих таргетов разработчиками генты было усиление разделения на первый сорт разработчиков (работающих с основным деревом) и второсортных разработчиков оверлеев (сторонних репозиториев), мнение которых не учитывается при стабилизации таргета. Или есть другие гипотезы?

Также неясно, для чего стабилизация таргетов нужна. Разработчику пакета приложения и так понятно - стабилен ли его пакет с такой-то версией приложения, и разработчик помечает "стабилен" (точнее вписывает в строку IUSE флаг с именем, соответствующим таргету). Но пользователь такой пакет установить не может до тех пор, пока таргет не стабилизирован главным вахтёром (центральным узлом отказа) команды Gentoo, потому что у пакета USE-флаг будет в круглых скобках и запрещён.

см. также
Спасибо сказали:
Аватара пользователя
yoricI
Сообщения: 2599
ОС: gentoo fluxbox

Re: Зачем у меня стоит две версии питона?

Сообщение yoricI »

Складывается впечатление, что Вы и так прекрасно обо всём этом осведомлены и лишь хотите вывести разработчиков на чистую воду. Так это лучше делать в их логове.
Спасибо сказали:
Shushandr
Сообщения: 86
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение Shushandr »

yoricI писал:
08.12.2023 07:11
Это лучше делать в их логове.
Там меня быстро банят.
Спасибо сказали:
Shushandr
Сообщения: 86
ОС: Gentoo

Re: Зачем у меня стоит две версии питона?

Сообщение Shushandr »

yoricI писал:
08.12.2023 07:11
Складывается впечатление, что Вы и так прекрасно обо всём этом осведомлены
Это, конечно, не так, осведомлён недостаточно. Например, как я уже писал выше, мне для понимания нехватает описаний, определений терминов. Например описания того, как работают люди с таргетами в Gentoo.
Спасибо сказали: