12 Pythons per ogni esigenza di programmazione

Quando scegli Python per lo sviluppo del software, scegli un ampio ecosistema linguistico con una vasta gamma di pacchetti che coprono tutti i tipi di esigenze di programmazione. Ma oltre alle librerie per tutto, dallo sviluppo della GUI all'apprendimento automatico, puoi anche scegliere tra una serie di runtime Python e alcuni di questi runtime potrebbero essere più adatti al caso d'uso che hai a portata di mano rispetto ad altri.

Ecco un breve tour delle distribuzioni Python, dall'implementazione standard (CPython) alle versioni ottimizzate per la velocità (PyPy), per casi d'uso speciali (Anaconda, ActivePython), per diversi runtime di linguaggio (Jython, IronPython) e persino per il taglio- sperimentazione edge (PyCopy, MesaPy).

CPython

CPython è l'implementazione di riferimento di Python, la versione standard a cui guardano tutte le altre incarnazioni di Python. CPython è scritto in C, come implica il nome, ed è prodotto dallo stesso gruppo principale di persone responsabili di tutte le decisioni di primo livello sul linguaggio Python.

Casi d'uso di CPython

Poiché CPython è l'implementazione di riferimento di Python, è il più conservatore in termini di ottimizzazioni. Questo è in base alla progettazione. I manutentori di Python vogliono che CPython sia l'implementazione di Python più ampiamente compatibile e standardizzata disponibile.

CPython è la scelta migliore quando la compatibilità e la conformità agli standard Python contano più delle prestazioni grezze e di altri problemi. CPython è utile anche per l'esperto che vuole lavorare con Python nella sua incarnazione più fondamentale e che è disposto a rinunciare a certe comodità. 

Ad esempio, con CPython, devi fare un po 'più di sollevamento per configurare gli ambienti virtuali. Altre distribuzioni (Anaconda, in particolare) forniscono maggiore automazione attorno alla configurazione dell'area di lavoro.

Limitazioni di CPython

CPython non ha le ottimizzazioni delle prestazioni trovate in altre edizioni di Python. Non esiste un compilatore JIT (just-in-time) nativo, nessuna libreria matematica accelerata e nessuna aggiunta di terze parti per motivi di prestazioni. Queste sono tutte cose che puoi aggiungere da solo, ma non sono raggruppate. Ancora una volta, tutto ciò è previsto dalla progettazione, per garantire la massima compatibilità e per consentire a CPython di servire come implementazione di riferimento, ma significa che qualsiasi ottimizzazione delle prestazioni spetta allo sviluppatore.

Inoltre, CPython fornisce solo una serie di strumenti di base per lavorare con Python. Il gestore di pacchetti pip, ad esempio, ottiene e installa i pacchetti dal repository di pacchetti PyPI nativo di Python. Pip installerà persino i binari precompilati (tramite il formato di distribuzione della ruota) se forniti dallo sviluppatore, ma non installerà alcuna dipendenza che i pacchetti potrebbero avere al di fuori di PyPI. 

Video correlato: come Python semplifica la programmazione

Perfetto per l'IT, Python semplifica molti tipi di lavoro, dall'automazione del sistema al lavoro in campi all'avanguardia come l'apprendimento automatico.

Anaconda Python

Anaconda, prodotto da Anaconda, Inc. (precedentemente Continuum Analytics), è progettato per gli sviluppatori Python che necessitano di una distribuzione supportata da un fornitore commerciale e con piani di supporto per le imprese. I principali casi d'uso di Anaconda Python sono matematica, statistica, ingegneria, analisi dei dati, apprendimento automatico e applicazioni correlate.

Casi d'uso di Anaconda Python

Anaconda raggruppa molte delle librerie più comuni utilizzate nel lavoro commerciale e scientifico di Python — SciPy, NumPy, Numba e così via — e ne rende molte altre accessibili tramite un sistema di gestione dei pacchetti personalizzato.

Anaconda si distingue dalle altre distribuzioni per come integra tutti questi pezzi. Una volta installato, Anaconda fornisce un'app desktop, Anaconda Navigator, che rende disponibile ogni aspetto dell'ambiente Anaconda attraverso una comoda GUI. Trovare componenti, tenerli aggiornati e lavorare con loro è molto più facile fuori dagli schemi con Anaconda che con CPython.

Un altro vantaggio è il modo in cui Anaconda gestisce i componenti dall'esterno dell'ecosistema Python se sono richiesti per un pacchetto specifico. Il condagestore di pacchetti, creato appositamente per Anaconda, gestisce l'installazione sia dei pacchetti Python che dei requisiti software esterni di terze parti.

Limitazioni di Anaconda Python

Poiché Anaconda include così tante librerie utili e può installarne ancora di più con pochi tasti, la dimensione di un'installazione di Anaconda può essere molto maggiore di CPython. Un'installazione di base di CPython viene eseguita su circa 100 MB; Le installazioni di Anaconda possono raggiungere dimensioni gigabyte. Questo può essere un problema nelle situazioni in cui hai limitazioni di risorse.

Un modo per ridurre l'impronta di Anaconda è installare Miniconda, una versione ridotta di Anaconda che include solo il minimo assoluto di pezzi necessari per essere operativi. Puoi quindi aggiungere i pacchetti a Miniconda come meglio credi, con un occhio a quanto spazio consuma ogni pezzo.

ActivePython

Come Anaconda, ActivePython è creato e gestito da una società a scopo di lucro, in questo caso ActiveState, che commercializza una serie di runtime linguistici insieme all'IDE multilingue Komodo.

Casi d'uso di ActivePython

ActivePython è rivolto a utenti aziendali e data scientist, persone che desiderano utilizzare Python, ma non vogliono dedicare molti sforzi all'assemblaggio e alla gestione di un'installazione Python. ActivePython utilizza il normale pipgestore di pacchetti di Python , ma fornisce anche alcune centinaia di librerie comuni come pacchetti verificati, insieme ad alcune librerie comuni con dipendenze di terze parti come la libreria Intel Math Kernel.

Limitazioni di ActivePython

C'è un potenziale svantaggio nell'approccio di ActivePython alla gestione dei pacchetti con dipendenze esterne. Se desideri eseguire l'aggiornamento a una versione più recente di un progetto con dipendenze complesse (ad esempio, TensorFlow), dovrai aggiornare anche la tua installazione di ActivePython. Negli ambienti in cui lo sviluppo tende a essere legato a una versione specifica di un progetto, questo è un problema minore. Ma negli ambienti in cui lo sviluppo tende a tenere traccia delle versioni all'avanguardia, potrebbe presentare un problema.

PyPy

Un sostituto immediato per l'interprete CPython, PyPy utilizza la compilazione just-in-time (JIT) per accelerare l'esecuzione dei programmi Python. A seconda dell'attività svolta, i miglioramenti delle prestazioni possono essere notevoli. 

Casi d'uso di PyPy

Una lamentela comune su Python in generale, e su CPython in particolare, è la velocità. Per impostazione predefinita Python viene eseguito molte volte più lentamente di C, a volte centinaia di volte più lentamente. PyPy JIT-compila il codice Python in linguaggio macchina, fornendo in media una velocità 7,7x rispetto a CPython. Alcune attività vengono eseguite fino a 50 volte più velocemente. 

La parte migliore è che è richiesto uno sforzo minimo da parte dello sviluppatore per sbloccare questi vantaggi. Scambia CPython per PyPy e per la maggior parte hai finito.

Limitazioni di PyPy

PyPy ha sempre funzionato al meglio con le applicazioni Python "pure". I pacchetti Python che si interfacciano con le librerie C, come NumPy, non sono andati altrettanto bene a causa del modo in cui PyPy ha emulato le interfacce binarie native di CPython. Nel tempo, tuttavia, gli sviluppatori di PyPy si sono ridotti a questo problema e hanno reso PyPy molto più compatibile con la maggior parte dei pacchetti Python che dipendono dalle estensioni C. In breve, il supporto per le estensioni C è ancora limitato, ma molto meno di prima.

Un altro possibile svantaggio di PyPy è la dimensione del runtime. Il runtime principale di CPython su Windows, esclusa la libreria standard, è di circa 4 MB, mentre il runtime di PyPy è di circa 32 MB. Nota anche che PyPy ha da tempo enfatizzato il ramo 2.x di Python, quindi, ad esempio, PyPy per Python 3.x è attualmente disponibile per Windows solo in una versione beta-test a 32 bit. (PyPy è disponibile nelle versioni a 64 bit per Python 2.xe 3.x per Linux e MacOS.)

Jython

La JVM (Java Virtual Machine) funge da runtime per molti linguaggi oltre a Java. La lunga lista include Groovy, Scala, Clojure, Kotlin e, sì, Python, tramite il progetto Jython.

Casi d'uso di Jython

Jython compila il codice Python 2.x in bytecode JVM ed esegue il programma risultante sulla JVM. In alcuni casi un programma compilato in Jython verrà eseguito più velocemente della sua controparte CPython, ma non sempre.

Il più grande vantaggio offerto da Jython è l'interoperabilità diretta con il resto dell'ecosistema Java. Java è utilizzato ancora più ampiamente di Python. L'esecuzione di Python sulla JVM consente agli sviluppatori Python di attingere a un enorme ecosistema di librerie e framework che altrimenti non sarebbero in grado di utilizzare. Allo stesso modo, Jython consente agli sviluppatori Java di utilizzare le librerie Python. 

Limitazioni di Jython

Il più grande svantaggio di Jython è che supporta solo il ramo 2.x di Python. Il supporto per Python 3.x è in fase di sviluppo ma lo è da tempo. Finora non è stato rilasciato nulla.

Nota anche che mentre Jython porta Python nella JVM, non porta Python su Android. Poiché attualmente non esiste un porting di Jython su Android corretto, Jython non può essere utilizzato per sviluppare applicazioni Android.

IronPython

Proprio come Jython è un'implementazione di Python sulla JVM, IronPython è un'implementazione di Python sul runtime .Net o CLR (Common Language Runtime). IronPython utilizza il DLR (Dynamic Language Runtime) di CLR per consentire ai programmi Python di funzionare con lo stesso grado di dinamismo che fanno in CPython.

Casi d'uso di IronPython

Come Jython, IronPython è un ponte. Il grande caso d'uso è l'interoperabilità tra Python e l'universo .Net. Gli assembly .Net esistenti possono essere caricati nei programmi IronPython utilizzando l'importazione nativa di Python e la sintassi di manipolazione degli oggetti. È anche possibile compilare il codice IronPython in un assembly ed eseguirlo così com'è o richiamarlo da altri linguaggi. Tuttavia, si noti che non è possibile accedere direttamente a MSIL (Microsoft Intermediate Language) nell'assembly da altre lingue .Net, poiché non è conforme alla specifica del linguaggio comune.

Limitazioni di IronPython

Come Jython, IronPython attualmente supporta solo Python 2.x. Tuttavia, sono in corso lavori per creare un'implementazione di IronPython 3.x.

WinPython

Come suggerisce il nome, WinPython è una distribuzione Python creata appositamente per gli utenti di Microsoft Windows. Le precedenti edizioni di CPython per Windows non erano ben progettate ed era difficile per gli utenti Windows sfruttare appieno l'ecosistema Python. L'edizione Windows di CPython è migliorata nel tempo, ma WinPython offre ancora molte cose che non si trovano in CPython.

Casi d'uso di WinPython

L'attrazione principale di WinPython è che si tratta di un'edizione autonoma di Python. Non deve essere installato sulla macchina in cui viene eseguito; deve solo essere decompresso in una directory. Ciò rende WinPython utile nei casi in cui il software non può essere installato su un determinato sistema, in scenari in cui un runtime Python preconfigurato deve essere distribuito insieme alle applicazioni per eseguirlo o in cui più edizioni di Python devono essere eseguite fianco a fianco senza interferire tra loro.

WinPython racchiude anche una serie di pacchetti orientati alla scienza dei dati — NumPy, Pandas, SciPy, Matplotlib, ecc. — In modo che possano essere utilizzati immediatamente, senza ulteriori passaggi di installazione. È incluso anche un compilatore C / C ++, poiché molte macchine Windows non ne hanno uno incluso e molte estensioni Python lo richiedono o possono utilizzarlo.

Limitazioni di WinPython

Una limitazione di WinPython è che potrebbe includere troppo per impostazione predefinita per alcuni casi d'uso. Per rimediare a ciò, i creatori di WinPython forniscono una versione "zero" di ciascuna edizione di WinPython, contenente solo l'installazione minima possibile del prodotto. Più pacchetti possono essere aggiunti in seguito, con lo pipstrumento di Python o con l'utilità WPPM di WinPython.

Python Portable

Python Portable è il runtime CPython in un pacchetto autonomo. Viene fornito per gentile concessione della raccolta PortableDevApps di applicazioni altrettanto autonome.

Casi d'uso di Python Portable

Come WinPython, Python Portable include una serie di pacchetti per il calcolo scientifico: Matplotlib, Numba, SymPy, SciPy, Cython e altri. Inoltre, come WinPython, Python Portable viene eseguito senza la necessità di essere installato formalmente sull'host Windows; può risiedere in qualsiasi directory o su un'unità rimovibile. Sono inclusi anche l'IDE di Spyder e il gestore di pacchetti pip di Python, quindi puoi aggiungere, modificare o rimuovere i pacchetti secondo necessità.

Limitazioni di Python Portable

A differenza di WinPython, Python Portable non include un compilatore C / C ++. Dovrai fornire un compilatore C per utilizzare il codice scritto con Cython (e quindi compilato in C).

Distribuzioni sperimentali di Python

Queste distribuzioni apportano modifiche significative a Python, o perché stanno utilizzando Python come punto di partenza per qualcosa di completamente nuovo, o perché stanno apportando modifiche strategiche a Python standard. In generale, questi pitoni non sono ancora raccomandati per l'uso in produzione. 

Se stai vivendo con una base di codice Python 2.x per il prossimo futuro, potresti dare un'occhiata al nostro articolo sulle distribuzioni sperimentali Python che mantengono vivo Python 2.x.

MicroPython

MicroPython fornisce un sottoinsieme minimo del linguaggio Python che può essere eseguito su hardware di fascia estremamente bassa come i microcontrollori. MicroPython implementa Python 3.4 con alcune differenze. È facile scrivere codice MicroPython se conosci Python, ma il codice esistente potrebbe non funzionare così com'è.

Pycopy