Python 2 EOL: Kako preživjeti kraj Pythona 2

Od 1. siječnja 2020., tvornici 2.x grane programskog jezika Python više ne podržavaju njezini tvorci, Python Software Foundation. Ovaj datum označava vrhunac drame koja se proteže godinama - prijelaz sa starije, manje sposobne, široko korištene verzije Pythona na noviju, snažniju verziju koja još uvijek prati svog prethodnika u usvajanju.

To je krajnje vrijeme. Python 3, s nebrojenim tehničkim poboljšanjima i poboljšanjima krajnjih korisnika u odnosu na Python 2, nikada nije bio u boljoj poziciji da trajno istisne Python 2. Velika većina popularnih paketa hostiranih u spremištu PyPI, prvom mjestu za ponovnu upotrebu Python koda, podržavaju Python 3. Python 3 je postao zadani Python interpreter za mnoge Linux distribucije. A većina nedavnih knjiga, akademija za kodiranje i mrežnih udžbenika preporučuje Python 3 za početnike.

Sad loše vijesti. Python 2, poput Windows 7 (ili Windows XP!), Bit će s nama u godinama koje dolaze. Mnogi od nas će se i dalje oslanjati na aplikacije napisane na Pythonu 2. Neki od nas će čak i dalje koristiti Python 2 za nove aplikacije, zbog internih ograničenja. Što biste trebali učiniti ako ste zapeli s Pythonom 2 u svijetu koji brzo postaje Python 3? Pogledajmo mogućnosti. 

Python 2 kraj života: što to znači

Prva i najvažnija stvar koju treba razumjeti u vezi s Python 2 koji ide na EOL (kraj životnog vijeka): Python 2 aplikacije i dalje će se pokretati. Nemojte ovo smatrati problemom milenijske bube, gdje se sve Python 2 aplikacije čarobno zaustavljaju 1. siječnja 2020. Jednostavno neće biti više službene podrške  za Python 2 od osnovnog tima za razvoj Pythona.

Evo što Python 2 EOL znači u praktičnom smislu:

  • Službeni ispravci programskih pogrešaka i sigurnosne zakrpe za Python 2 prestaju.  Glavni razvojni tim neće riješiti nikakve novootkrivene probleme u tumaču Python 2 ili standardnoj knjižnici Python 2. Međutim, komercijalni dobavljači mogli bi samostalno održavati Python 2, a druge bi treće strane mogle rastaviti Python 2 bazu koda i nastaviti tamo gdje je jezgra stala. (Više o tome kasnije.)
  • Nezavisni Python projekti napustit će Python 2. Knjižnice koje su podržavale i Python 2 i Python 3 počet će svoje resurse posvećivati ​​isključivo Pythonu 3. Mnogi od ovih projekata volontiraju, a mnogo je manje posla podržati samo jednu verziju jezika. Svaki projekt odlučit će o podršci za Python 2 za sebe, ali mnogi se glavni Python projekti obvezuju da će u potpunosti odustati od podrške za Python 2 do 2020.
  • Podrška platforme za Python 2 će nestati. Linux distribucije i pružatelji usluga u oblaku mogu i dalje uključivati ​​Python 2 runtime. Ali očekujte da podrška za Python 2 s vremenom postane manje robusna. Gotovo će sigurno još uvijek biti moguće pokrenuti kontejneriziranu verziju Pythona 2 na oblačnoj platformi, ali ne postoji jamstvo da će pružatelji usluga u oblaku i dalje održavati vlastite Python 2 spremnike.

Ako ste zapeli s Python 2 aplikacijama, kako se nositi s odsustvom podrške za Python 2? Najbolje što je dugoročno učiniti jest pronaći strategiju za uklanjanje svih ovisnosti o Pythonu 2. Ali to je samo prva od mnogih opcija. 

Prijelaz s Pythona 2

Ostavljanje Pythona 2 za Python 3 može biti lakše nego što očekujete, ovisno o veličini baze koda i vanjskim ovisnostima. Pythonova službena dokumentacija sadrži nekoliko jednostavnih koraka koje možete poduzeti kako biste utvrdili je li vaš projekt "zaštićen od budućnosti", odnosno može li se koristiti u Pythonu 3 s malo ili nimalo prilagodbi. Jedan od najboljih prvih koraka koji možete poduzeti je korištenje  caniusepython3paketa kako biste shvatili koje bi komponente ili ovisnosti, ako postoje, blokirale migraciju.

Ako ste zapeli s Pythonom 2 jer određena komponenta aplikacije radi samo na Pythonu 2, počnite tako što ćete prijeći s te komponente. Pogledajte postoji li alternativa koja je kompatibilna s Python 3, a zatim obnovite aplikaciju od te točke prema van. Ideja je potražiti najmanja mjesta na kojima leže nečije ovisnosti o Pythonu 2 i riješiti ih.

Najmanju ruku možete učiniti, ako treba ostati na Python 2 u nekom obliku, se početi migraciju na najnoviju verziju Python 2-Python 2.7.16 kao ovog pisanja-a koristiti kao polazište za Python 3 Na taj ćete način imati koristi od ispravki programskih pogrešaka koje će biti dostupne za Python 2.7 prije službenog završetka života.

Upotrijebite alternativno vrijeme izvođenja Python 2

Ako promjena osnove koda Python 2 nije izvodljiv prijedlog, druga je alternativa korištenje drugog Python 2 runtimea, razvijenog od strane treće strane. Alternativni Python 2 runtimes može imati duži prozor podrške od samog Pythona 2.

Tauthon

Tauthon je račvanje Pythona 2.7.18 "s novom sintaksom, ugrađenim sustavima i bibliotekama s pozadinskim Pythonom 3.x", prema projektu README. Tauthon također uključuje popravke i zakrpe za jezik kad god ih održavatelji mogu pružiti. U teoriji bi Tauthon trebao raditi kao zamjenska zamjena za Python 2.7. Najnovije izdanje ovog teksta, Tauthon 2.8.2, uključuje napomene o funkcijama, argumente samo za ključne riječi, async/awaitsintaksu i druge značajke koje su ranije bile dostupne samo u Pythonu 3.

PyPy

PyPy, pravovremeno ubrzano vrijeme izvođenja za Python, koristi Python 2 kao ključni dio vlastite interne infrastrukture i već dugo podržava Python 2 kao glavnu verziju. Dokumentacija za projekt tvrdi „budući da je RPython [temelj PyPy-a] izgrađen na vrhu Pythona 2 i to je vrlo malo vjerojatno da će se promijeniti, verzija PyPy-a Python 2 postojat će„ zauvijek “, tj. Sve dok je sam PyPy oko." PyPy može predstavljati probleme s kompatibilnošću ili izvedbom nekih Python paketa koji se oslanjaju na C proširenja, iako PyPyev razvojni tim neprestano radi na rješavanju tih problema.

IronPython

IronPython, implementacija Pythona za vrijeme izvođenja .Net, ima verziju Python 2 koja još uvijek prima aktivnu podršku. Trenutni popis programera izjavio je da vjerojatno neće podržavati Python 2 nakon 2020. godine, što je bolje da se koncentriraju na IronPython3. Međutim, to ne znači da netko drugi ne bi mogao sam nastaviti s takvom podrškom.

Cython

Druga mogućnost, iako s ograničenim prozorom podrške, je Cython. Cython kompajlira Python u C s neobaveznim tipkanjem radi poboljšanja performansi i podržava Python 2 od njegovog osnutka. Moguće je koristiti Cython za pretvorbu Python 2 koda u C za daljnju upotrebu kao "smrznuti" binarni. Time biste čak mogli poboljšati performanse, ovisno o prirodi aplikacije. (Programi koji su uglavnom vezani za I / O neće postići puno poboljšanja.)

Međutim, Cython planira odustati od podrške za Python 2 do kraja godine. To ne znači da se programi Python 2 više neće kompajlirati u Cython, već samo da bi Cython kod koji koristi sintaksu Python 2 trebao biti kompajliran pomoću Pythona 3

Kupite proširenu podršku za Python 2 od dobavljača

Jedno dugoročno rješenje je dobivanje podrške od dobavljača Python rješenja. ActiveState, tvorac distribucije ActivePython i Komodo IDE, nudi komercijalnu podršku kupcima koji žele ostati s Pythonom 2 ili koji žele migrirati na Python 3 identificirajući dijelove njihovog Python stoga koji se moraju prepisati u Python 3.

Neki dobavljači pružaju podršku za Python 2 kao dio njegove prisutnosti u drugom podržanom proizvodu. Red Hat Enterprise Linux verzije 6 i 7 uključuju Python 2, tako da će svi ugovori o podršci kupljeni od Red Hat-a za te verzije OS-a uključivati ​​kontinuiranu podršku za Python 2 tijekom životnog vijeka podrške proizvoda.

Ako koristite Python 2 putem usluge u oblaku, postoji šansa da će usluga i dalje podržavati Python 2 na svoj način. Na primjer, AWS je izjavio da će pružati sigurnosne zakrpe za svoje Python 2.7 vrijeme izvođenja do 31. prosinca 2020, iako se to ne odnosi na bilo koji drugi paket Python 2.7.

Treća mogućnost je kupnja podrške od konzultantske tvrtke ili dobavljača. Razina podrške koju vam pružaju varirala bi ovisno o vašim potrebama i ambicijama. Može se sastojati od smišljanja plana prijelaza za odmak od Pythona 2 i prepravljanja bilo kojeg ovisnog softvera (vjerojatno najbolje dugoročne strategije) ili ručnog spajanja zakrpa za Python 2 u prilagođenu izgradnju vremena izvođenja (ambiciozno i ​​složeno ).

Održavajte Python 2 sami

Python je projekt otvorenog koda. Ništa vas neće spriječiti da sami primijenite potrebne popravke. Ako je popravak promjena u standardnoj knjižnici Pythona, to obično nije preteško, jer je većina standardne knjižnice Python sama napisana na Pythonu. Ali ako trebate unijeti promjene u C modul koji Python koristi u standardnoj knjižnici ili CPython interpreter, to bi bilo izazovnije. Morate znati C i biti upoznati s CPythonovim unutrašnjostima da biste to postigli.

Ne poduzimati ništa

Ako nije pukao, nemojte ga popravljati. To je strategija koju su mnoge tvrtke koristile sa sustavima Windows NT i Windows 2000 kada su ti operativni sustavi prestali živjeti. Python aplikacije koje su namijenjene samo internoj upotrebi i nisu izložene javnom Internetu mogle bi se teoretski pokretati unedogled.

Virtualni strojevi i kontejnerizacija pružaju načine za održavanje ovih vrsta aplikacija u kontroliranom okruženju. Dato izdanje izvedbe Python 2 možete "zamrznuti" u sliku spremnika ili VM, zajedno sa standardnom bibliotekom, modulima potrebnim za vašu aplikaciju i samom aplikacijom.

Usprkos tome, bilo koju staru aplikaciju, čak i onu koja nema vanjsku izloženost, treba redovito ponovno procjenjivati. U svakom slučaju, najbolja dugoročna strategija za korisnike Pythona 2 je migracija na Python 3. Python 2, koliko god bio velik, nešto je što treba pomaknuti.

Pročitajte više o Pythonu

  • Što je Python? Moćno, intuitivno programiranje
  • Što je PyPy? Brži Python bez boli
  • Što je Cython? Python brzinom C
  • Vodič za Cython: Kako ubrzati Python
  • Kako instalirati Python na pametan način
  • Najbolje nove značajke u Pythonu 3.8
  • Bolje upravljanje Python projektima s poezijom
  • Virtualenv i venv: Objašnjena Python virtualna okruženja
  • Python virtualenv i venv čine i ne čine
  • Objašnjeni Python navoji i potprocesi
  • Kako se koristi Python program za ispravljanje pogrešaka
  • Kako koristiti timeit za profiliranje Python koda
  • Kako koristiti cProfile za profiliranje Python koda
  • Započnite s async u Pythonu
  • Kako koristiti asyncio u Pythonu
  • Kako pretvoriti Python u JavaScript (i natrag)
  • Python 2 EOL: Kako preživjeti kraj Pythona 2
  • 12 Pythona za svaku programsku potrebu
  • 24 Python biblioteke za svakog programera Pythona
  • 7 slatkih IDE-a za Python koje ste možda propustili
  • 3 glavna nedostatka Pythona - i njihova rješenja
  • 13 uspoređenih Python web okvira
  • 4 Python test okvira za uništavanje bugova
  • 6 sjajnih novih Python značajki koje ne želite propustiti
  • 5 Python distribucija za svladavanje strojnog učenja
  • 8 sjajnih Python knjižnica za obradu prirodnog jezika