» »

Python 2 je mrtev, naj živi Python 3

Python 2 je mrtev, naj živi Python 3

Hack A Day - V začetku tedna je izšla nova verzija Pythona 2, kar načeloma ni novica za prve strani. Toda 2.7.18 je drugačna, saj prestavlja zadnjo inačico Pythona 2. Python ima že dolgo zgodovino, saj sega v 80. leta prejšnjega stoletja. Verzija 2.0 je izšla oktobra 2000 in prinesla številne novosti, zaradi katerih je Python postal eden najpopularnejših programskih jezikov moderne dobe. Čeprav je Python 3.0 izšel že leta 2008, je aktivno vzdrževanje linije 2.x potekalo vse doslej. Glavni razlog je bila nepopolna združljivost obeh verzij, saj veliko kode v Pythonu 2 terja prilagoditve, da bo delovala v Pythonu 3. A ves čas je bil jasen končni cilj, da se Python 2 upokoji. To bi se bilo moralo zgoditi že bistveno prej (ob izidu Pythona 3 je bil načrtovan datum 2015), a ker je bila migracija počasna, se je konec podpore (EOL) večkrat odmaknil. Sedaj smo še korak bliže temu. Python 2.7.18 je zadnja verzija, ki je izšla (Eulerjevo število je priljubljena referenca). Novih ne bo, je pojasnil Benjamin Peterson.

Problem ni bila koda posameznih projektov, temveč knjižnice in drugi kosi, na katerih temeljijo posamezni projekti. Domačo kodo je treba zanemarljivo popraviti - po navadi zgolj stavek print(). Večji projekti pa so bili zalogaj povsem drugačne dimenzije. Kaj se bo zgodilo sedaj? Še vedno namreč obstaja ogromno kode za Python 2. To ni tako velik problem, saj se je ta koda zelo verjetno prevajala v starejših verzijah, niti ne v 2.7.17. Prineslo pa bo to težave v prihodnosti, saj morebitne luknje in hrošči, ki jih bodo odkrili v Pythonu 2, ne bodo zakrpani. Z vidika vzdrževanja to ne bo povzročalo tako velikih težav kot na primer COBOL, saj sta obe veji Pythona podobni. Seveda pa je modro vso novo kodo napisati v Pythonu 3.

24 komentarjev

evene ::

I say, it's about time.

Jarno ::

Ko sem prebral 2008, je postala odločitev bolj razumljiva.
#65W!

starfotr ::

Ne vem zakaj odlašanje. Ali je sedaj manj kode, kot je bilo 2008? Najbrž bo treba še več dela, kot če bi to naredili že takrat.

darkolord ::

Mene zanima, kako takšnim projektom uspe sproducirati nekaj brez kakršne koli misli na backwards compaiblity. A so čisto oblivious na vse, kar se dogaja okrog njih?

Po mojem bi rabili malo več Linusov, da bi jih malo prizemljili, ko bi poskušali narediti takšne neumnosti.

Glugy ::

Dinozavrom seveda to ne bo všeč; dodatno delo za to da gre svet naprej? Ufff raje se še malo usedem na ta udoben fotelj do zadnjega možnega trenutka ko to gre.

Ales ::

starfotr je izjavil:

Ne vem zakaj odlašanje. Ali je sedaj manj kode, kot je bilo 2008? Najbrž bo treba še več dela, kot če bi to naredili že takrat.

Seveda je zdaj manj Python 2 kode. Medtem se je večino obstoječih Python knjižnic prilagodilo za Python 3, novi projekti so od začetka uporabili Python 3 in ne 2.

Težava je predvsem popolnoma dobro delujoča stara Python 2 produkcijska koda, za katero nihče ne želi plačati stroškov prilagoditve na Python 3. Taka koda bo lepo delovala naprej, še dolgo.

Sicer pa bo Red Hat vzdrževal Python 2 vsaj do junija 2024, ko se bo zaključila podpora za RHEL 7. Skozi extended support bo podpora na voljo še kaki dve leti, do 2026.

Python 2 je sicer tudi v RHEL 8, a tu bo podpora ukinjena preden bo konec siceršnje podpore za OS (2029 oz. 2031) in sicer isto junija 2024.

No, tudi po 2024 ne bo Python 2 kar magično nehal delovati...

darkolord je izjavil:

Mene zanima, kako takšnim projektom uspe sproducirati nekaj brez kakršne koli misli na backwards compaiblity. A so čisto oblivious na vse, kar se dogaja okrog njih?

Po mojem bi rabili malo več Linusov, da bi jih malo prizemljili, ko bi poskušali narediti takšne neumnosti.

Če bi ti vedel, koliko neskončnega načrtovanja, dogovarjanja in tudi kreganja je bilo okoli prehoda Python 2 na Python 3... Preden so se odločili kako in kaj, vmes in potem.

Poglej malo bloge in mailing liste za nazaj, pa prijetno branje... >:D

Zgodovina sprememb…

  • spremenil: Ales ()

darkolord ::

Mnja, sem malo prebral, pa je žal tako, kot sem predvideval. Konkretno na primer za "print", so prevladala Guidova čustva, oz. želja po tem, da naredi stvar tako, kot bi si jo želel.

It looks to me like most arguments for keeping print are motivated by
backwards compatibility (in its many guises, like the existence of 15
years of tutorials) and not by what would be best if we were to design
a language from scratch.

...

I really believe that
dropping print in favor of a few built-in functions is an improvement
-- backwards compatibility be damned!

kow ::

starfotr je izjavil:

Ne vem zakaj odlašanje. Ali je sedaj manj kode, kot je bilo 2008? Najbrž bo treba še več dela, kot če bi to naredili že takrat.


Ne, ne razumete fotr. Ne ker ste stari, ampak ker niste programer.

Ales ::

@darkolord, primer "print" je trivialen, a ni..?

Fundamentalna razlika med Python 2 in 3 je branje in pisanje podatkov. Poglej spremembe pri str, kako se obravnava unicode, kako se dela s tekstom in binarnimi podatki...

WhiteAngel ::

Ne vem, zakaj bi bila 2.7.18 zadnja verzija python 2.x veje? Če bo kaj kritičnega najdenega in bodo dobili patch, bodo valda pofiksali.

darkolord ::

@ales, ja, ampak če že pri najbolj trivialni metodi ni bilo interesa za backwards compat., potem je jasno, da ga tudi pri kompleksnejših zadevah ne bo.

Ales ::

Kako to misliš "ne bo", v prihodnjiku? Vse to v zvezi s Python 3 in kompatibilnostjo za nazaj se je dogajalo pred 12-14 leti. Vse to je že mimo.

Še vedno se mi zdi, da se ne zavedaš razsežnosti problematike niti ogromne količine časa, ki ga je skupnost vložila v razprave o tem. Na žalost si si izbral najbolj banalen primer, ki pravzaprav nima veze z ničemer.

@WhiteAngel, novica dejansko govori o tem, da je s Pythonom 2 zdaj dokončno konec, kar se Python skupnosti tiče. Ničesar več ne bodo fiksali, konec je.

Če 12 let ni dovolj za prehod, potem pa res ne vem...

Sicer pa mastodonti verjetno tako ali tako uporabljajo Red Hat, tako da imajo še 4 do 6 let v dobrem in v tem času še lahko pričakujejo popravke od Red Hata. V tem času bo zagotovo tudi še kak fork životaril, a bo po moje v tem času tudi mrknil.

Zgodovina sprememb…

  • spremenil: Ales ()

PrimoZ_ ::

darkolord je izjavil:

@ales, ja, ampak če že pri najbolj trivialni metodi ni bilo interesa za backwards compat., potem je jasno, da ga tudi pri kompleksnejših zadevah ne bo.

Mislim da si tole malo pomešal.
Bistvena stvar ki so jo z verzijo 3 želeli urediti je bilo obravnavanje stringov in unicode podpora.
In potem ko že enkrat delaš take velike spremembe, pač popraviš še kako trivialno malenkost, kot je print.

darkolord ::

Od trenutka, ko se je odločil, da že "print" - ki je uporabljen pretty much v vsaki skripti - ne bo compatible z v2, je bil morebiten backwards compatibility že pokopan. In to se je odločil še preden se je "py3k" začel. Ravno zato, ker je najbolj trivialna zadeva, je toliko bolj problematična.

Seveda se zavedam razsežnosti te problematike, a se oni več kot očitno niso zavedali pomembnosti tega, glede na to, da so rabili 12 let, da so si upali reči "zdej pa dost".

Pri tem imajo žal komercialni produkti velikokrat prednost, ker si tam ne morejo privoščiti, da bi developerje/stranke tako potisnili v drek. Tukaj ti pa rečejo "fuck off, go away".

Zgodovina sprememb…

  • spremenilo: darkolord ()

jukoz ::

Python 2.8 == tauthon
https://github.com/naftaliharris/tauthon

Move along, nothing to see here =)

roli ::

A je kdo kdaj uporabljal Swift? Trenutno je aktualen Swift 5. Praktično vsako novo leto pride nova verzija. Do verzije 4 so bili prehodi med verzijami kar pošteno boleči lahko. Apple je pa droppal support za stare verzije praktično avtomatsko. Res je, da si tukaj vsaj dobil način za avtomatsko konverzijo, ki ti je lahko včasih malo pomagal. No z zadnjimi Swift verzijami so itak obljubili boljšo kompatibilnost. Tako, da je bil prehod iz 4 na 5 zelo neboleč.

Iz verzije 1 v 2 so tudi pri Swiftu spreminjali print.
http://www.r00li.com

techfreak :) ::

Vcasih sem uporabljal Swift, in po izkusnjah je bilo potrebno precej stvari popravljati pri nadgradnji na novo verzijo. Swift ima sicer precejsnjo prednost da se skompajla, kar pomeni, da zadeva naceloma deluje v primeru uspesnega builda.

Pri Pythonu lahko samo upas da ima dovolj dobro pokritost s testi, ker drugace moras rocno stestirati celotno funkcionalnost.

Ales ::

darkolord je izjavil:

Od trenutka, ko se je odločil, da že "print" - ki je uporabljen pretty much v vsaki skripti - ne bo compatible z v2, je bil morebiten backwards compatibility že pokopan. In to se je odločil še preden se je "py3k" začel. Ravno zato, ker je najbolj trivialna zadeva, je toliko bolj problematična.

Jaz se čisto drugače spomnim stvari iz tistih let. Sploh se ne spomnim, da bi bila print funkcija odločilna za karkoli.

O tem, da bi bilo dobro nekatere fundamentalne stvari zastaviti drugače, se je pogovarjalo že tam nekje 2002. Print funkcija je bila že takrat na tapeti, ampak vedno sem imel občutek, da ni poglavitna. Veliko govora o vsem skupaj je bilo tudi na PyCon 2003.

Potem se je Python 3 kuhal naprej in pride PEP-3100, Miscellaneous Python 3.0 Plans, 20.8.2004.

Dokončanje načrtov za spremembo print v funkcijo je prišlo dobre dve leti kasneje: PEP 3105 -- Make print a function, 19.11.2006.

Guidovo razmišljanje na mailing listi razumem v kontekstu odebeljenega (Replacement for print in Python 3.0, 01.09.2005):

"It looks to me like most arguments for keeping print are motivated by
backwards compatibility (in its many guises, like the existence of 15
years of tutorials) and not by what would be best if we were to design
a language from scratch
."

Prekinitev kompatibilnosti za nazaj je bila že jasna, print funkcija je le ena od stvari, ki se bodo ob tej priliki spremenile. Nisem pa imel občutka, da bi se kdo sploh dotikal print funkcije, če ne bi spreminjali Pythona kot celote.


Seveda se zavedam razsežnosti te problematike, a se oni več kot očitno niso zavedali pomembnosti tega, glede na to, da so rabili 12 let, da so si upali reči "zdej pa dost".

Eh, lahko biti general po bitki... Seveda je obstajalo zavedanje, da bo konec kompatibilnosti za nazaj velika stvar. Vprašanje je, če bi koga vprašal tam nekje 2009 ali 2010 (Python 3 je prišel ven 2008), ali bi se šlo k Python 3 točno na tak način, kot se je šlo, to pa zih.

Ampak skoraj si ne predstavljam, da ne bi šli v to, samo malo drugače. In sigurno ne zaradi print funkcije, pač pa zaradi bolj važnih stvari...

Heh, po svoje mi je smešno... po toliko letih se spet pogovarjam o Python 2 / 3... Kot da še ne bi imel dovolj! :))

BigWhale ::

More backwards compatibility more technical debt. ;>

kow ::

Govoris kot da ekstra "technical debt" ne zamenjamo za druge pridobitve.

krho ::

BigWhale je izjavil:

More backwards compatibility more technical debt. ;>

Ja zato imaš pri Goju tamal miljon technical debt-a... BC so vse verzije od 1.0. iz leta 2012 do danes.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

sbawe64 ::

Imam nekako v spominu, da je Debian (nekaj v zvezi s sistem tools) še zelo odvisen od Python v2.
2020 is new 1984
Corona World order

Zgodovina sprememb…

  • spremenilo: sbawe64 ()

hruske ::

Ne, Debian zelo aktivno iz repozitorijev meče pakete, ki delujejo zgolj s Python 2.

Sicer pa se z darkolordom strinjajo tudi Python core razvijalci, ki so že ugotovili, da je tak prehod, kjer ne poskrbiš za enostavno migracijo, zadeva, ki je nočejo ponoviti.
Kalkulator nove omrežnine 2024 - https://omreznina.karlas.si/Kalkulator

LightBit ::

Tale Python 3 je samo preseravanje. Kompatibilnost bi bila lahko veliko boljša.
Raje bi zrihtali, da bi bilo manj specifik glede različnih sistemov.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Python 2 je mrtev, naj živi Python 3

Oddelek: Novice / Ostala programska oprema
247131 (3746) LightBit
»

UTF-8 in Python

Oddelek: Programiranje
7934 (787) HotBurek
»

[python] težave z namestitvijo setuptools, pypi

Oddelek: Programiranje
11875 (771) ragezor
»

Knjiga za python

Oddelek: Programiranje
64161 (3787) brodul
»

Izšel Python 3.0 (strani: 1 2 )

Oddelek: Novice / Ostala programska oprema
6012840 (9009) ZaphodBB

Več podobnih tem