Hlavní navigace

Python 2 nás opouští, za dva roky skončí podpora, distribuce už ho odsouvají

Miro Hrončok

Python 2 se s námi pomalu loučí, ať už se nám to líbí nebo ne. Vývojáři Pythonu už vyhlásili, že v roce 2020 přestanou jakýmkoliv způsobem starou verzi podporovat. Tvůrci distribucí už ji proto odsouvají do pozadí.

Doba čtení: 7 minut

Python 2 vyšel už v roce 2000 a tenkrát šlo o přelomovou verzi se spoustou vylepšení, přepisem prošel garbage collector a přišla například i plná podpora Unicode. Mezi tím ale už uběhlo více než 17 let a vyšel Python 3. Ten je nyní jasně považován za budoucnost Pythonu a vývojáři se rozhodli podporu staré řady ukončit.

Python 2 čeká rychlý konec

Vývojáři Pythonu přestanou v roce 2020 jakýmkoliv způsobem podporovat Python 2.7. Přestanou tedy vycházet nové verze, bezpečnostní záplaty, nepůjdou hlásit chyby a podobně. Původně se tak mělo stát dokonce už v roce 2015, ale životnost byla o 5 let prodloužena. Neexistují žádné indikátory, že by mělo dojít k dalšímu prodlužování. Časový rozvrh je součástí plánu vydávání řady 2.7.

The End Of Life date (EOL, sunset date) for Python 2.7 has been moved five years into the future, to 2020. This decision was made to clarify the status of Python 2.7 and relieve worries for those users who cannot yet migrate to Python 3.

Verze Pythonu 2.8 tedy už nikdy nevyjde, což je popsáno v PEP 404. Zajímavé je, že se hodně hemží referencemi na Monty Python a samotné číslo tohoto PEPu je vtipem.

Rule number six: there is no official Python 2.8 release. There never will be an official Python 2.8 release. It is an ex-release. Python 2.7 is the end of the Python 2 line of development.

Když zkombinujeme tyto dvě informace, vyjde nám, že po roce 2020 bude s Pythonem 2 ze strany jeho vývojářů definitivní konec. Jistě budou existovat firmy, které budou nabízet dlouhodobou podporu a bezpečnostní opravy, a různé pokusy o oživení, ale ani jedno z toho nebude ve spolupráci s Python Software Foundation.

Zajímavým řešením tohoto problému je použití alternativní implementace Pythonu, PyPy. Nové verze by měly vycházet i po roce 2020, nejspíše „navždy“. Kompatibilita PyPy s oficiální implementací (zvanou CPython) je obecně velmi dobrá, ale není stoprocentní.

Není známo přesné datum „ukončení“ Pythonu 2, ale komunita kolem Pythonu odhaduje, že k ukončení dojde na konferenci PyCon US, která se tradičně koná na jaře. Existuje i stránka s odpočtem.

Co mám dělat?

Pokud vaše open-source projekty vyžadují Python 2, měli byste okamžitě něco začít dělat. Existuje oficiální dokumentace k portování na Python 3 i návod pro konzervativní projekty.

Pokud vaše proprietární projekty vyžadují Python 2, postupujte stejně, nebo si připravte peněženky. Pokud jste sysadmini a používáte Python 2 ve svých magických skriptech na všechno, začněte panikařit.

Spousta významných projektů v Pythonu ale podporu pro Python 2 ukončí ještě dříve než Python samotný. Takže ani využití alternativního interpretru (jako PyPy nebo Tauthonu) projekty vyžadující Python 2 nespasí.

Vědecké projekty například ukončují podporu pro Python 2. Django vyšlo ve verzi 2, která Python 2 už nepodporuje, ačkoli Django 1.11 je LTS a bude podporované až do srpna 2020. Naprostá většina známých a používaných knihoven je s Pythonem 3 kompatibilní nebo obsahuje rozumnější alternativu.

Jedním s oblíbených velkých projektů, který může mít problém, je Ansible, ale i tam již vývojáři začali panikařit a něco dělat.

Zásadním problémem, který zatím nikdo příliš neřeší, je závislost na Pythonu 2 pro různé build skripty programů, které napsané v Pythonu vůbec nejsou. Existuje překvapivě velké množství softwaru, které někde mezi svatou trojicí ./configure, make a make install uvnitř volá nějaký ten Python skript napsaný ještě v době, kdy si Richard Stallman vymýšlel první verzi GNU GPL. Jestli bude fungovat s Pythonem 3 nezjistíme, dokud to nevyzkoušíme.

Co na to distribuce?

V posledních několika letech často slýcháme, že „Python 3 bude výchozí Python“ a podobná prohlášení ze stran různých linuxových distribucí jako je třeba Ubuntu nebo Fedora. Viz naše zprávičky: Ubuntu 16.04 LTS nebude obsahovat Python 2, Fedora plánuje přechod na Python 3 a Fedora 22 bude zřejmě ve výchozím stavu používat Python 3.

Vnímavý pozorovatel tohoto stavu by si tak oprávněn mohl klást otázku: „Neříkali tohle už minule? A předminule?“ Je třeba se ale nejprve zamyslet nad tím, co to vlastně znamená, že Python 3 je výchozí verze Pythonu. Tento problém má několik rovin, podíváme se na ně z pohledu Fedory, kterou pomáhám vyvíjet.

Výchozí instalace neobsahuje Python 2

Stáhnete si distribuci z internetu, nebo si přinesete DVD z LinuxDays, nainstalujete na železo nebo do virtuálky novou verzi distribuce a Python 2 tam prostě není. Toto je v současnosti normální stav ve většině mainstreamových distribucí, včetně Fedory i Ubuntu. Některé distribuce to měly jednoduché: výchozí instalace Archu, Gentoo nebo Alpine Linuxu toho obsahuje tak málo, že nemít tam Python 2 není příliš těžké. Ve Fedoře jsme tohoto stavu dosáhli pro Fedora Workstation 23 (vydána na podzim 2015).

Znamenalo to mimo jiné „překlopit“ instalátor Fedory zvaný Anaconda do Pythonu 3 a přejít ze zastaralého správce balíčků yum na dnf. V té době bylo ve výchozí instalaci Fedory asi 80 balíčků, které používaly Python 2 a bylo potřeba je převést na Python 3. V některých případech šlo pouze o změnu balíčku samotného, protože daný projekt podporoval obě verze Pythonu, mnoho knihoven a aplikací jsme však museli aktivně ve spolupráci s upstreamem portovat do nové verze.

Původně jsme chtěli vydat Fedoru 23 bez Pythonu 2 ve všech edicích (Workstation, Server, Cloud), ale u serverového vydání se nám to nepodařilo, především kvůli Sambě a na ní závisejícímu projektu FreeIPA. Samba je velmi konzervativní projekt a nějaké novoty jako v té době 7 let starý Python 3 se tam zaváděly velmi těžko. V současné době už je to lepší, ale Samba je stále z velké části závislá na Pythonu 2, především se bez něj nedá sestavit.

Python 2 zůstává v repozitářích a dá se standardním způsobem doinstalovat. Spousta balíčků v repozitářích na něm závisí. Ve Fedoře tento stav monitorujeme, v současné době zhruba dvě třetiny Python balíčků podporují Python 3. V době vydání Fedory 23 to byla asi jedna třetina. Je třeba podotknout, že ve zbývající třetině je hromada softwaru, který pravděpodobně nikdy Python 3 podporovat nebude a až jednoho dne přestane fungovat, nikomu nebude příliš chybět. Naprostá většina „důležitých“ věcí Python 3 podporuje (graf historie).

Když aplikace podporuje obě verze Pythonu, ve Fedoře se použije Python 3.

Když uživatel napíše python do konzole, pustí se Python 3

Otevřete terminál, napíšete python a spustí se moderní Python 3. Toto již velice dávno udělal jako první Arch Linux a nějakou dobu to nepřekvapí ani uživatele Gentoo. Ve Fedoře zastáváme názor „upstream first“ a řídíme se zde rozhodnutím samotného projektu Python (PEP 394) který říká, že kvůli zpětné kompatibilitě by příkaz python měl být odkaz na  python2.

Ve Fedoře to tak tedy bude, dokud se toto nezmění. V PEP 394 je ale mj. napsáno, že toto pravidlo se dříve či později změní. Naším plánem je tedy aktivně pracovat s upstreamem na tom, aby se to stalo co nejdříve. Když se to stane, plánujeme ve Fedoře zareagovat hned v dalším vydání.

Balíčky pojmenované python-něco znamenají Python 3

Když nainstalujete přes dnf nebo aptitude balíček pojmenovaný python, jakou verzi dostanete? Když nainstalujete python-requests, je to knihovna Requests pro kterou verzi Pythonu?

Ve Fedoře historicky balíčky Python 2 používaly v názvu jen python, balíčky Python 3 pak používaly python3. Toto v současné době měníme. Všechny balíčky se mají jmenovat python2-něco nebo python3-něco. Pomocí mechanismu zvaného „virtual provides“ poskytují v současnosti python2-něco balíčky i variantu python-něco, takže pro uživatele se zatím nic nezměnilo. Máme ale prostředky, jak tento mechanismus jednoho dne přepnout, aby to bylo obráceně (tedy aby se instalovaly Python 3 varainty). Ve Fedoře jsme se rozhodli, že tuto změnu provedeme v součinnosti se změnou příkazu  python.

Balíčky v současné době poloautomaticky přejmenováváme. Nemůžeme prostě jít a všude to udělat, balíčky ve Fedoře mají majitele/správce a musíme s nimi komunikovat, proto to trvá dlouho. Balíčky musíme nejen přejmenovat, ale také zajistit, že názvy s python (bez čísla) nejsou použity jako závislosti.

Python 2 zmizí z repozitářů

Ubuntu plánuje přesunout Python 2 z Canonicalem spravovaného repozitáře do repozitáře komunitního. Ve Fedoře takové rozdělení nemáme (ačkoli historicky něco podobného existovalo: Fedora Core a Fedora Extras).

Obě verze Pythonu a ekosystémy kolem nich ve Fedoře existují ve společném repozitáři. Jsou spravovány komunitou, ve které jsou i zaměstnanci Red Hatu. Skupina, která se stará o Python ve Fedoře, se jmenuje Fedora Python SIG (Special Interest Group).

Je ale pravda, že hlavními správci balíčku python2 jsme my z Red Hatu. Po roce 2020 ale chceme z této role odstoupit (balíček „orphannout“) a předpokládáme, že se najde někdo jiný z komunity, kdo se ho ujme.

Věřím, že Python 2 bohužel zůstane v repozitářích ještě velmi dlouho potom, co ho upstream „zabije“.

Zajímavá situace je i na poli knihoven frameworků. Například nedávno vydané Django 2 již nepodporuje Python 2 a některé python2-... balíčky tak z Fedory budou postupně mizet. Věřím, že to bude dlouhodobý trend.

Plán pro Fedoru

Celý plán je detailně popsán v dokumentu který sice tvoříme v Red Hatu, ale naprosto otevřeně a v součinnosti s komunitou. V dokumentu jsou nastíněny jednotlivé fáze, jejich načasování apod.

Našli jste v článku chybu?