Python 2 EOL: come sopravvivere alla fine di Python 2

A partire dal 1 gennaio 2020, il ramo 2.x del linguaggio di programmazione Python non è più supportato dai suoi creatori, la Python Software Foundation. Questa data segna il culmine di un dramma che dura da anni: il passaggio da una versione più vecchia, meno capace e ampiamente utilizzata di Python a una versione più recente e più potente che segue ancora l'adozione del suo predecessore.

È giunto il momento. Python 3, con innumerevoli miglioramenti tecnici e per l'utente finale rispetto a Python 2, non è mai stato in una posizione migliore per sostituire definitivamente Python 2. La stragrande maggioranza dei pacchetti popolari ospitati nel repository PyPI, il primo negozio di codice Python riutilizzabile, supporta Python 3. Python 3 è diventato l'interprete Python predefinito per molte distribuzioni Linux. E la maggior parte dei libri recenti, dell'accademia di programmazione e dei tutorial online consigliano Python 3 per i principianti.

Adesso le cattive notizie. Python 2, come Windows 7 (o Windows XP!), Sarà con noi per gli anni a venire. Molti di noi continueranno a fare affidamento su app scritte in Python 2. Alcuni di noi continueranno persino a utilizzare Python 2 per nuove app, a causa di restrizioni interne. Cosa dovresti fare se sei bloccato con Python 2 in quello che sta rapidamente diventando un mondo di Python 3? Diamo un'occhiata alle opzioni. 

Fine del ciclo di vita di Python 2: cosa significa

La prima e più importante cosa da capire su Python 2 che andrà in EOL (end of life): le applicazioni Python 2 continueranno a funzionare. Non pensare a questo come a un problema del Millennium Bug, in cui tutte le applicazioni Python 2 si interrompono magicamente il 1 ° gennaio 2020. Non ci sarà più supporto ufficiale  per Python 2 dal team di sviluppo di Python principale.

Ecco cosa significa in termini pratici l'EOL di Python 2:

  • Le correzioni di bug ufficiali e le patch di sicurezza per Python 2 cesseranno.  Nessun problema scoperto di recente nell'interprete Python 2 o nella libreria standard Python 2 verrà risolto dal team di sviluppo principale. Tuttavia, i fornitori commerciali potrebbero mantenere Python 2 da soli e altre terze parti potrebbero eseguire il fork del codice base di Python 2 e continuare da dove si era interrotto il core team. (Ne parleremo più avanti.)
  • I progetti Python di terze parti abbandoneranno Python 2. Le librerie che hanno supportato sia Python 2 che Python 3 inizieranno a dedicare le loro risorse esclusivamente a Python 3. Molti di questi progetti sono gestiti da volontari e supportare solo una versione del linguaggio richiede molto meno lavoro. Ogni progetto deciderà autonomamente sul supporto di Python 2, ma molti dei principali progetti Python si impegnano a eliminare completamente il supporto di Python 2 entro il 2020.
  • Il supporto della piattaforma per Python 2 diminuirà. Le distribuzioni Linux e i fornitori di servizi cloud possono continuare a includere il runtime di Python 2. Ma aspettati che il supporto per Python 2 diventi meno robusto nel tempo. Quasi certamente sarà ancora possibile eseguire una versione containerizzata di Python 2 su una piattaforma cloud, ma non vi è alcuna garanzia che i fornitori di servizi cloud continueranno a mantenere i propri contenitori Python 2.

Se sei bloccato con le applicazioni Python 2, come dovresti gestire l'assenza del supporto Python 2? La cosa migliore da fare a lungo termine è trovare una strategia per rimuovere tutte le dipendenze da Python 2. Ma questa è solo la prima di molte opzioni. 

Transizione da Python 2

Lasciare Python 2 per Python 3 potrebbe essere più facile di quanto ti aspetti, a seconda delle dimensioni della base di codice e delle dipendenze esterne. La documentazione ufficiale di Python ha alcuni semplici passaggi che puoi intraprendere per determinare se il tuo progetto è "a prova di futuro", cioè può essere utilizzato in Python 3 con poca o nessuna regolazione. Uno dei primi passi migliori che puoi compiere è usare il  caniusepython3pacchetto per capire quali componenti o dipendenze, se ce ne sono, potrebbero bloccare una migrazione.

Se sei bloccato con Python 2 perché un particolare componente di un'applicazione funziona solo su Python 2, inizia allontanandoti da quel componente. Verifica se esiste un'alternativa compatibile con Python 3, quindi ricostruisci l'applicazione da quel punto in poi. L'idea è cercare i luoghi più piccoli in cui si trovano le proprie dipendenze da Python 2 e affrontarli.

Il  minimo che puoi fare, se devi rimanere su Python 2 in qualche forma, è iniziare migrando all'ultima versione di Python 2 — Python 2.7.16 al momento della stesura di questo documento — e usarla come punto di partenza per Python 3 In questo modo trarrai vantaggio dalle correzioni di bug che saranno disponibili per Python 2.7 prima del suo termine ufficiale di vita.

Usa un runtime Python 2 alternativo

Se la modifica della base di codice Python 2 non è una proposta praticabile, un'altra alternativa è usare un diverso runtime Python 2, sviluppato da una terza parte. I runtime alternativi di Python 2 potrebbero avere una finestra di supporto più lunga rispetto a Python 2 stesso.

Tauthon

Tauthon è un fork di Python 2.7.18 "con nuova sintassi, built-in e librerie con backport da Python 3.x", secondo il README del progetto. Tauthon include anche, ogni volta che i manutentori possono fornirli, correzioni e patch per la lingua. In teoria Tauthon dovrebbe funzionare come un sostituto immediato di Python 2.7. La versione più recente al momento della stesura di questo documento, Tauthon 2.8.2, include annotazioni di funzioni, argomenti di sole parole chiave, async/awaitsintassi e altre funzionalità precedentemente disponibili solo in Python 3.

PyPy

PyPy, il runtime accelerato just-in-time per Python, utilizza Python 2 come parte fondamentale della propria infrastruttura interna e supporta da tempo Python 2 come versione principale. La documentazione del progetto afferma che "poiché RPython [la fondazione di PyPy] è costruito sopra Python 2 ed è estremamente improbabile che cambi, la versione Python 2 di PyPy sarà in giro 'per sempre', cioè finché lo stesso PyPy in giro." PyPy potrebbe porre problemi di compatibilità o prestazioni con alcuni pacchetti Python che si basano su estensioni C, sebbene il team di sviluppo di PyPy lavori costantemente per risolvere questi problemi.

IronPython

IronPython, un'implementazione di Python per il runtime .Net, ha una versione di Python 2 che riceve ancora supporto attivo. Il suo attuale elenco di sviluppatori ha dichiarato che probabilmente non supporterà Python 2 dopo il 2020, meglio concentrarsi su IronPython3. Tuttavia, ciò non significa che qualcun altro non possa continuare da solo tale supporto.

Cython

Un'altra possibilità, sebbene con una finestra di supporto limitata, è Cython. Cython compila Python in C con la digitazione opzionale per migliorare le prestazioni e ha supportato Python 2 sin dal suo inizio. È possibile utilizzare Cython per convertire il codice Python 2 in C per un uso continuato come binario "congelato". In questo modo potresti persino ottenere un aumento delle prestazioni, a seconda della natura dell'applicazione. (I programmi che sono principalmente legati a I / O non vedranno molti miglioramenti.)

Tuttavia, Cython prevede di abbandonare il supporto per Python 2 entro la fine dell'anno. Ciò non significa che i programmi Python 2 non vengano più compilati su Cython, solo che il codice Cython utilizzando la sintassi di Python 2 dovrebbe essere compilato utilizzando Python 3

Acquista il supporto esteso per Python 2 da un fornitore

Una soluzione a lungo termine è ottenere supporto da un fornitore di soluzioni Python. ActiveState, creatore della distribuzione ActivePython e dell'IDE di Komodo, offre supporto commerciale per i clienti che desiderano rimanere con Python 2 o che desiderano migrare a Python 3 identificando le parti del loro stack Python che devono essere riscritte in Python 3.

Alcuni fornitori forniscono supporto per Python 2 come parte della sua presenza in un altro prodotto supportato. Le versioni 6 e 7 di Red Hat Enterprise Linux includono Python 2, quindi qualsiasi contratto di supporto acquistato da Red Hat per quelle versioni del sistema operativo includerà il supporto continuo per Python 2 per tutta la durata del supporto del prodotto.

Se stai utilizzando Python 2 tramite un servizio cloud, è possibile che il servizio continui a supportare Python 2 a modo suo. AWS, ad esempio, ha dichiarato che fornirà patch di sicurezza per il suo runtime Python 2.7 fino al 31 dicembre 2020, sebbene ciò non si applichi a nessun pacchetto Python 2.7 di terze parti.

Una terza opzione è acquistare il supporto da una società di consulenza o da un appaltatore. Il livello di supporto che ti danno varia a seconda delle tue esigenze e ambizioni. Potrebbe consistere nell'elaborare un piano di transizione per allontanarsi da Python 2 e far riscrivere qualsiasi software dipendente (probabilmente la migliore strategia a lungo termine), o unire manualmente le patch per Python 2 in una build personalizzata del runtime (ambiziosa e complessa ).

Mantieni Python 2 da solo

Python è un progetto open source. Non c'è niente che ti impedisca di implementare tu stesso le correzioni necessarie. Se la correzione è una modifica alla libreria standard di Python, in genere non è troppo difficile, poiché la maggior parte della libreria standard di Python è essa stessa scritta in Python. Ma se hai bisogno di apportare modifiche a un modulo C utilizzato da Python nella libreria standard, o nell'interprete CPython, sarebbe più difficile. Dovrai conoscere C e avere familiarità con gli interni di CPython per ottenere ciò.

Fare niente

Se non è rotto, non aggiustarlo. Questa è la strategia che molte aziende hanno utilizzato con Windows NT e Windows 2000 quando questi sistemi operativi sono terminati. Le applicazioni Python che sono solo per uso interno e che non sono esposte alla rete Internet pubblica potrebbero in teoria essere eseguite indefinitamente.

Le macchine virtuali e la containerizzazione forniscono modi per mantenere questo tipo di applicazioni attive e in buone condizioni in un ambiente controllato. Puoi "congelare" una data edizione del runtime Python 2 in un'immagine contenitore o VM, insieme alla sua libreria standard, i moduli necessari per la tua app e l'applicazione stessa.

Detto questo, qualsiasi app legacy, anche quella che non ha esposizione esterna, dovrebbe essere rivalutata regolarmente. In ogni caso, la migliore strategia a lungo termine per gli utenti di Python 2 è migrare a Python 3. Python 2, per quanto eccezionale sia stato, è qualcosa da superare.

Ulteriori informazioni su Python

  • Cos'è Python? Programmazione potente e intuitiva
  • Cos'è PyPy? Python più veloce senza dolore
  • Cos'è Cython? Python alla velocità di C
  • Tutorial Cython: come velocizzare Python
  • Come installare Python in modo intelligente
  • Le migliori nuove funzionalità di Python 3.8
  • Migliore gestione dei progetti Python con Poetry
  • Virtualenv e venv: spiegazione degli ambienti virtuali Python
  • Python virtualenv e venv cosa fare e cosa non fare
  • Spiegazione del threading e dei sottoprocessi di Python
  • Come utilizzare il debugger Python
  • Come usare timeit per profilare il codice Python
  • Come usare cProfile per profilare il codice Python
  • Inizia con async in Python
  • Come usare asyncio in Python
  • Come convertire Python in JavaScript (e viceversa)
  • Python 2 EOL: come sopravvivere alla fine di Python 2
  • 12 Pythons per ogni esigenza di programmazione
  • 24 librerie Python per ogni sviluppatore Python
  • 7 dolci IDE Python che potresti aver perso
  • 3 principali carenze di Python e le loro soluzioni
  • 13 framework web Python a confronto
  • 4 framework di test Python per schiacciare i tuoi bug
  • 6 fantastiche nuove funzionalità di Python da non perdere
  • 5 distribuzioni Python per padroneggiare l'apprendimento automatico
  • 8 fantastiche librerie Python per l'elaborazione del linguaggio naturale