Title: Python 3.10 stanie się domyślną wersją począwszy od 2022-07-01 Author: Michał Górny Translator: Michał Górny Posted: 2022-06-13 Revision: 1 News-Item-Format: 2.0 Display-If-Installed: dev-lang/python:3.8 Display-If-Installed: dev-lang/python:3.9 Gentoo planuje zmienić domyślną wersję Pythona z 3.9 na 3.10 w dniu 1. lipca 2022 r. Użytkownicy, którzy nie zmieniali wartości flag PYTHON_TARGETS oraz PYTHON_SINGLE_TARGET nie muszą nic robić. Menadżer pakietów automatycznie zaktualizuje wsparcie Pythona do nowej wersji przy kolejnej aktualizacji systemu po tej zmianie. Informacje zawarte w tej wiadomości przeznaczone są dla użytkowników, którzy zmieniali preferowaną wersję Pythona bądź chcą przeprowadzić aktualizację w bezpieczniejszy sposób. Uwaga: standardowa metoda aktualizacji podmienia obsługiwaną wersję Pythona w poszczególnych pakietach w miarę ich aktualizacji. Oznacza to, że aktualizacja systemu możliwa będzie wyłącznie, jeżeli wszystkie zainstalowane pakiety obsługują nową wersję. W trakcie aktualizacji zależności poszczególnych zainstalowanych programów mogą stać się tymczasowo niedostępne, nie powinno to jednak mieć wpływu na działanie już uruchomionych aplikacji. Użytkownicy, którzy wykorzystują plik make.conf do ustawienia wartości zmiennych PYTHON_TARGETS lub PYTHON_SINGLE_TARGET powinni usunąć te wartości, gdyż będą one kolidowały z przykładami package.use przedstawionymi w tej wiadomości. Wykorzystywanie pliku make.conf do konfiguracji tych zmiennych jest niewskazane, gdyż ustawienia te nadpisują domyślne wartości flag zawarte w poszczególnych pakietach. Dalszy ciąg tej wiadomości zakłada wykorzystywanie package.use lub równoważnego pliku konfiguracyjnego. Dostępne są następujące możliwości aktualizacji: 1. Automatyczna aktualizacja wersji Pythona. Aby skorzystać z tej opcji, należy usunąć zmienne PYTHON_TARGETS oraz PYTHON_SINGLE_TARGET. Wówczas menadżer pakietów automatycznie przeprowadzi aktualizację ilekroć zmieni się domyślna wersja Pythona w Gentoo. Niemniej, może zaistnieć konieczność ręcznej aktualizacji w przypadku wystąpienia problemów. 2. Odroczenie aktualizacji poprzez wymuszenie poprzedniej wersji w pliku package.use. 3. Wymuszenie wcześniejszej aktualizacji poprzez podanie nowej wersji i dokonanie aktualizacji systemu. 4. Zastosowanie bezpiecznego podejścia (tj. zmniejszającego ryzyko niesprawnych programów w trakcie aktualizacji) poprzez wykonanie aktualizacji w kilku krokach. Proces ten jest szczegółowo opisany w dalszej części wiadomości. 5. Zastosowanie dowolnej kombinacji zmiennych PYTHON_TARGETS oraz PYTHON_SINGLE_TARGET. Odroczenie aktualizacji ======================= Aby odroczyć aktualizację do późniejszego terminu, należy wymusić poprzednią wersję Pythona: */* PYTHON_TARGETS: -* python3_9 */* PYTHON_SINGLE_TARGET: -* python3_9 W ten sposób Python 3.9 zostanie wymuszony na stałe i przyszłe aktualizacje zostaną zablokowane. Należy jednak pamiętać, że jest to rozwiązanie tymczasowe i w przyszłości aktualizacja stanie się konieczna. Wymuszenie aktualizacji ======================= Aby wymusić aktualizację wcześniej, należy wybrać Pythona 3.10: */* PYTHON_TARGETS: -* python3_10 */* PYTHON_SINGLE_TARGET: -* python3_10 Zalecane jest jednak usunięcie tych ustawień po podanym wyżej terminie, aby nie kolidowały w przyszłości z kolejną zmianą domyślnej wersji Pythona. Bezpieczna procedura aktualizacji ================================= Bezpieczniejszą alternatywą do standardowego procesu jest wprowadzenie wsparcia Pythona 3.10 w pierwszym kroku, a następnie usunięcie Pythona 3.9. Należy jednak pamiętać, że będzie wymagało to dwukrotnego przebudowania wszystkich pakietów używających Pythona, tak więc łączny czas aktualizacji zostanie wydłużony. Najpierw załączyć należy obydwie wersje Pythona i przeprowadzić aktualizację systemu: */* PYTHON_TARGETS: -* python3_9 python3_10 */* PYTHON_SINGLE_TARGET: -* python3_9 Następnie przełączyć należy wartość PYTHON_SINGLE_TARGET i przebudować pakiety używające tych flag: */* PYTHON_TARGETS: -* python3_9 python3_10 */* PYTHON_SINGLE_TARGET: -* python3_10 W ostatnim kroku należy wyłączyć poprzednią wersję i przeprowadzić kolejną aktualizację: */* PYTHON_TARGETS: -* python3_10 */* PYTHON_SINGLE_TARGET: -* python3_10 Po terminie zmiany domyślnych wartości, konfigurację tę można usunąć. Alternatywnie, pozostawienie jej zablokuje przyszłą aktualizację do Pythona 3.11 i pozwoli na ręczne przeprowadzenie bezpieczniej aktualizacji. Proces aktualizacji =================== Usunięcie Pythona 3.9 wymaga, by odpowiednie flagi zostały jednocześnie wyłączone w całym drzewie zależności. Jeżeli niektóre z zainstalowanych pakietów nie zostaną uwzględnione w planowanej aktualizacji, mogą one zablokować ten proces. Dlatego też istotne jest przeprowadzenie aktualizacji przy pomocy parametrów `--deep --changed-use @world` bądź równoważnych, jak również wcześniejsze usunięcie niepotrzebnych pakietów. Można tego dokonać używając poleceń: emerge --depclean emerge -1vUD @world emerge --depclean