Title: Python 3.11 stanie się domyślną wersją począwszy od 2023-05-01 Author: Michał Górny Translator: Michał Górny Posted: 2023-04-02 Revision: 1 News-Item-Format: 2.0 Display-If-Installed: dev-lang/python:3.9 Display-If-Installed: dev-lang/python:3.10 Gentoo planuje zmienić domyślną wersję Pythona z 3.10 na 3.11 w dniu 1. maja 2023 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. W tym samym czasie wsparcie Pythona 3.9 zostanie usunięte z eclass. Paczka interpretera pozostanie wspierana tak długo, jak to będzie możliwe. PyPy3.9 będzie wspierane do momentu wydania i stabilizacji PyPy3.10. 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_10 */* PYTHON_SINGLE_TARGET: -* python3_10 W ten sposób Python 3.10 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.11: */* PYTHON_TARGETS: -* python3_11 */* PYTHON_SINGLE_TARGET: -* python3_11 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.11 w pierwszym kroku, a następnie usunięcie Pythona 3.10. 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_10 python3_11 */* PYTHON_SINGLE_TARGET: -* python3_10 Następnie przełączyć należy wartość PYTHON_SINGLE_TARGET i przebudować pakiety używające tych flag: */* PYTHON_TARGETS: -* python3_10 python3_11 */* PYTHON_SINGLE_TARGET: -* python3_11 W ostatnim kroku należy wyłączyć poprzednią wersję i przeprowadzić kolejną aktualizację: */* PYTHON_TARGETS: -* python3_11 */* PYTHON_SINGLE_TARGET: -* python3_11 Po terminie zmiany domyślnych wartości, konfigurację tę można usunąć. Alternatywnie, pozostawienie jej zablokuje przyszłą aktualizację do Pythona 3.12 i pozwoli na ręczne przeprowadzenie bezpieczniej aktualizacji. Proces aktualizacji =================== Usunięcie Pythona 3.10 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