CPython: differenze tra le versioni
mNessun oggetto della modifica |
m sistemazione fonti e fix vari |
||
Riga 22: | Riga 22: | ||
== Progetto == |
== Progetto == |
||
Una caratteristica particolare di CPython è che utilizza [[Global Interpreter Lock|Global Interpreter Lock (GIL)]]'','' <ref>{{ |
Una caratteristica particolare di CPython è che utilizza [[Global Interpreter Lock|Global Interpreter Lock (GIL)]]'','' <ref>{{Cita web|url=https://docs.python.org/3/glossary.html#term-global-interpreter-lock|titolo=global interpreter lock in CPython|lingua=Inglese}}</ref> un meccanismo che permette l'esecuzione di un solo [[Thread (informatica)|thread]] Python alla volta su un singolo processore.<ref>{{Cita web|url=https://docs.python.org/3/c-api/init.html|titolo= |accesso=4 giugno 2020}}</ref> Questo non significa che il [[multithreading]] non abbia senso: ad esempio se il tuo codice è spesso in attesa di input/output, rilascia il GIL, permettendo ad altri thread di essere eseguiti. |
||
Questa potrebbe essere la situazione tipica quando più thread servono client separati. Un thread potrebbe essere in attesa della risposta da un client, un altro potrebbe essere in attesa dell'esecuzione di una query [[Base di dati|al database]], mentre il terzo thread sta elaborando il codice Python. |
Questa potrebbe essere la situazione tipica quando più thread servono client separati. Un thread potrebbe essere in attesa della risposta da un client, un altro potrebbe essere in attesa dell'esecuzione di una query [[Base di dati|al database]], mentre il terzo thread sta elaborando il codice Python. |
||
Riga 30: | Riga 30: | ||
Nelle applicazioni reali sono piuttosto rare le situazioni in cui il GIL rappresenta un collo di bottiglia significativo. Questo perché Python è un linguaggio intrinsecamente lento e generalmente non utilizzato per operazioni che richiedono un uso intensivo della [[CPU]] o che richiedono bassi tempi di risposta. Python è solitamente utilizzato ad alto livello e richiama funzioni e librerie per eseguire attività specializzate. Tali librerie non sono scritte in Python e, il codice Python in un altro thread, può essere eseguito mentre viene eseguita una chiamata a uno di questi processi sottostanti. Le librerie non Python non sono soggette a GIL e possono eseguire contemporaneamente molti thread su più processori senza restrizioni. |
Nelle applicazioni reali sono piuttosto rare le situazioni in cui il GIL rappresenta un collo di bottiglia significativo. Questo perché Python è un linguaggio intrinsecamente lento e generalmente non utilizzato per operazioni che richiedono un uso intensivo della [[CPU]] o che richiedono bassi tempi di risposta. Python è solitamente utilizzato ad alto livello e richiama funzioni e librerie per eseguire attività specializzate. Tali librerie non sono scritte in Python e, il codice Python in un altro thread, può essere eseguito mentre viene eseguita una chiamata a uno di questi processi sottostanti. Le librerie non Python non sono soggette a GIL e possono eseguire contemporaneamente molti thread su più processori senza restrizioni. |
||
Per ottenere vera concorrenza in Python, è necessario ricorrere a processi dell'interprete Cpython separati e gestiti dal sistema operativo. La comunicazione tra processi separati può essere più complessa rispetto alla comunicazione tra thread. Il modulo ''multiprocessing'' offre alcune soluzioni, ma può ancora introdurre overhead. |
Per ottenere vera concorrenza in Python, è necessario ricorrere a processi dell'interprete Cpython separati e gestiti dal sistema operativo. La comunicazione tra processi separati può essere più complessa rispetto alla comunicazione tra thread. Il modulo ''multiprocessing'' offre alcune soluzioni, ma può ancora introdurre overhead. |
||
La presenza del GIL semplifica l'implementazione di CPython e facilita l'implementazione di applicazioni multi-thread che non traggono vantaggio dall'esecuzione simultanea di codice Python. Senza GIL, la concorrenza diventerebbe responsabilità dello sviluppatore che dovrebbe gestire esplicitamente la sincronizzazione tra i diversi thread per evitare [[race conditions]] e altri problemi legati alla [[Concorrenza (informatica)|concorrenza]]. |
La presenza del GIL semplifica l'implementazione di CPython e facilita l'implementazione di applicazioni multi-thread che non traggono vantaggio dall'esecuzione simultanea di codice Python. Senza GIL, la concorrenza diventerebbe responsabilità dello sviluppatore che dovrebbe gestire esplicitamente la sincronizzazione tra i diversi thread per evitare [[race conditions]] e altri problemi legati alla [[Concorrenza (informatica)|concorrenza]]. |
||
Sebbene siano state avanzate numerose proposte per eliminare GIL ma considerando una serie di fattori complessi è stato deciso di mantenerlo. Sebbene GIL possa limitare le prestazioni in alcune applicazioni, offre un buon compromesso tra semplicità, stabilità e prestazioni per la maggior parte degli sviluppatori Python. Per consentire un maggiore parallelismo, nell'ottobre 2023 è stato rilasciato un miglioramento che permette l'utilizzo di un GIL separato per sotto-interprete in un singolo processo Python e sono stati descritti come "thread con condivisione opt-in". |
Sebbene siano state avanzate numerose proposte per eliminare GIL ma considerando una serie di fattori complessi è stato deciso di mantenerlo. Sebbene GIL possa limitare le prestazioni in alcune applicazioni, offre un buon compromesso tra semplicità, stabilità e prestazioni per la maggior parte degli sviluppatori Python. Per consentire un maggiore parallelismo, nell'ottobre 2023 è stato rilasciato un miglioramento che permette l'utilizzo di un GIL separato per sotto-interprete in un singolo processo Python e sono stati descritti come "thread con condivisione opt-in".<ref>{{Cita web|url=https://lwn.net/Articles/941090/|titolo= |autore=Jake Edge|accesso=13 gennaio 2024}}</ref><ref>{{Cita web|url=https://peps.python.org/pep-0684/|titolo= |accesso=13 gennaio 2024}}</ref> |
||
Dopo diversi dibattiti, nel 2023 è stato lanciato un progetto per proporre di rendere GIL opzionale dalla versione 3.13 di Python, |
Dopo diversi dibattiti, nel 2023 è stato lanciato un progetto per proporre di rendere GIL opzionale dalla versione 3.13 di Python,<ref>{{Cita web|url=https://peps.python.org/pep-0703/|titolo= |sito=peps.python.org|lingua=en|accesso=17 settembre 2023}}</ref> la cui uscita è prevista per ottobre 2024.<ref>{{Cita web|url=https://peps.python.org/pep-0719/#schedule|titolo= |sito=peps.python.org|accesso=17 settembre 2023}}</ref> |
||
== Piattaforme supportate == |
== Piattaforme supportate == |
||
Le piattaforme ufficialmente supportate a livello-1 sono [[Linux]] per Intel a 64 bit che utilizza una toolchain GCC, [[macOS]] per Intel a 64 bit e ARM e [[Microsoft Windows]] per Intel a 32 e 64 bit. Esiste un supporto ufficiale di livello 2 per Linux per ARM a 64 bit, wasm32 ([[WebAssembly|Web Assembly]]) con supporto runtime WASI e Linux per Intel a 64 bit tramite una toolchain clang. I sistemi con supporto di livello 3 includono ARM Windows a 64 bit, iOS a 64 bit, [[Raspberry Pi OS]] (Linux per armv7 con hard float), Linux per PowerPC a 64 bit in modalità little-endian e Linux per s390x . |
Le piattaforme ufficialmente supportate a livello-1 sono [[Linux]] per Intel a 64 bit che utilizza una toolchain GCC, [[macOS]] per Intel a 64 bit e ARM e [[Microsoft Windows]] per Intel a 32 e 64 bit. Esiste un supporto ufficiale di livello 2 per Linux per ARM a 64 bit, wasm32 ([[WebAssembly|Web Assembly]]) con supporto runtime WASI e Linux per Intel a 64 bit tramite una toolchain clang. I sistemi con supporto di livello 3 includono ARM Windows a 64 bit, iOS a 64 bit, [[Raspberry Pi OS]] (Linux per armv7 con hard float), Linux per PowerPC a 64 bit in modalità little-endian e Linux per s390x . |
||
Altre piattaforme hanno implementazioni funzionanti, tra cui: |
Altre piattaforme hanno implementazioni funzionanti, tra cui:<ref>{{Cita web|url=https://wiki.python.org/moin/PythonImplementations|titolo= |accesso=19 luglio 2012}}</ref> |
||
=== Sistemi [[Unix-like]]: === |
=== Sistemi [[Unix-like]]: === |
||
Riga 88: | Riga 88: | ||
=== Enterprise Linux === |
=== Enterprise Linux === |
||
Queste versioni di Python sono distribuite con le distribuzioni Linux enterprise attualmente supportate. |
Queste versioni di Python sono distribuite con le distribuzioni Linux enterprise attualmente supportate.<ref>{{Cita web|url=https://linuxlifecycle.com/|titolo= |accesso=15 ottobre 2017}}</ref> Lo stato del supporto di Python nella tabella si riferisce al supporto da parte del team principale di Python e non da parte del responsabile della distribuzione. |
||
{| class="wikitable sortable" |
{| class="wikitable sortable" |
||
|+Enterprise Linux |
|+Enterprise Linux |
||
Riga 101: | Riga 101: | ||
|- |
|- |
||
|[[Ubuntu]] 20.04 LTS (Focal Fossa) |
|[[Ubuntu]] 20.04 LTS (Focal Fossa) |
||
|2030-04<ref>{{Cita web|url=https://ubuntu.com/about/release-cycle|sito=Ubuntu| |
|2030-04<ref>{{Cita web|url=https://ubuntu.com/about/release-cycle|titolo= |sito=Ubuntu|accesso=18 gennaio 2021}}</ref> |
||
|<ref>{{Cita web|url=https://www.phoronix.com/news/Python-2-EOL-Ubuntu-20.04|sito=phoronix.com| |
|<ref>{{Cita web|url=https://www.phoronix.com/news/Python-2-EOL-Ubuntu-20.04|titolo= |sito=phoronix.com|accesso=1º aprile 2020}}</ref> |
||
| {{Version|co|3.8}}<ref>{{ |
| {{Version|co|3.8}}<ref>{{cita web|titolo=Binary package "python3" in ubuntu focal |sito=Launchpad.net |url=https://launchpad.net/ubuntu/focal/+package/python3}}</ref> |
||
|- |
|- |
||
|Ubuntu 18.04 LTS (Bionic Beaver) |
|Ubuntu 18.04 LTS (Bionic Beaver) |
||
|2028-04<ref>{{Cita web|url=https://www.serverwatch.com/server-news/canonical-extends-ubuntu-18.04-lts-linux-support-to-10-years.html| |
|2028-04<ref>{{Cita web|url=https://www.serverwatch.com/server-news/canonical-extends-ubuntu-18.04-lts-linux-support-to-10-years.html|titolo= |accesso=9 settembre 2019}}</ref> |
||
| {{Version|o|2.7}}<ref name="ubuntu-py2">{{ |
| {{Version|o|2.7}}<ref name="ubuntu-py2">{{cita web|titolo=python-defaults package: Ubuntu |editore=Canonical Ltd. |data=8 giugno 2018 |url=https://launchpad.net/ubuntu/+source/python-defaults |accesso=8 giugno 2018}}</ref> |
||
| {{Version|o|3.6}}<ref name="ubuntu-py3">{{ |
| {{Version|o|3.6}}<ref name="ubuntu-py3">{{cita web|titolo=python3-defaults package: Ubuntu |editore=Canonical Ltd. |data=8 giugno 2018 |url=https://launchpad.net/ubuntu/+source/python3-defaults |accesso=8 giugno 2018}}</ref> |
||
|- |
|- |
||
|Ubuntu 16.04 LTS (Xenial Xerus) |
|Ubuntu 16.04 LTS (Xenial Xerus) |
||
|2021-04-30<ref>{{Cita web|url=https://computing.cs.cmu.edu/news/2020/eol-ubuntu-1604|sito=computing.cs.cmu.edu| |
|2021-04-30<ref>{{Cita web|url=https://computing.cs.cmu.edu/news/2020/eol-ubuntu-1604|titolo= |sito=computing.cs.cmu.edu|accesso=15 febbraio 2021}}</ref> |
||
| {{Version|o|2.7}}<ref name="ubuntu-py2"/> |
| {{Version|o|2.7}}<ref name="ubuntu-py2"/> |
||
| {{Version|o|3.5}}<ref name="ubuntu-py3"/> |
| {{Version|o|3.5}}<ref name="ubuntu-py3"/> |
||
|- |
|- |
||
|[[Debian]] 12 |
|[[Debian]] 12 |
||
|2028-06<ref name="debian12">{{Cita web|url=https://www.debian.org/News/2023/20230610|sito=debian.org}}</ref> |
|2028-06<ref name="debian12">{{Cita web|url=https://www.debian.org/News/2023/20230610|titolo= |sito=debian.org}}</ref> |
||
| |
| |
||
| {{Version|co|3.11}}<ref name="debian12"/> |
| {{Version|co|3.11}}<ref name="debian12"/> |
||
|- |
|- |
||
|[[Debian]] 11 |
|[[Debian]] 11 |
||
|2026-06<ref name="debian.org">{{Cita web|url=https://www.debian.org/News/2021/20210814.en.html|sito=debian.org| |
|2026-06<ref name="debian.org">{{Cita web|url=https://www.debian.org/News/2021/20210814.en.html|titolo= |sito=debian.org|accesso=4 gennaio 2022}}</ref> |
||
| |
| |
||
| {{Version|co|3.9}}<ref name="debian.org"/> |
| {{Version|co|3.9}}<ref name="debian.org"/> |
||
|- |
|- |
||
|Debian 10 |
|Debian 10 |
||
|2024-06<ref>{{Cita web|url=https://wiki.debian.org/LTS|sito=wiki.debian.org| |
|2024-06<ref>{{Cita web|url=https://wiki.debian.org/LTS|titolo= |sito=wiki.debian.org|accesso=15 febbraio 2021}}</ref> |
||
| {{Version|o|2.7}}<ref>{{ |
| {{Version|o|2.7}}<ref>{{cita web|titolo=Debian -- Details of package python in buster |sito=packages.debian.org |url=https://packages.debian.org/buster/python |accesso=13 settembre 2019}}</ref> |
||
| {{Version|co|3.7}}<ref>{{ |
| {{Version|co|3.7}}<ref>{{cita web|titolo=Debian -- News -- Debian 10 "buster" released |sito=debian.org |url=https://www.debian.org/News/2019/20190706.en.html |accesso=9 agosto 2019}}</ref> |
||
|- |
|- |
||
|Debian 9 |
|Debian 9 |
||
|2022-06-30<ref>{{Cita web|url=https://www.debian.org/News/2020/20200709.en.html|sito=debian.org| |
|2022-06-30<ref>{{Cita web|url=https://www.debian.org/News/2020/20200709.en.html|titolo= |sito=debian.org|accesso=15 febbraio 2021}}</ref> |
||
| {{Version|o|2.7}}<ref>{{ |
| {{Version|o|2.7}}<ref>{{cita web|titolo=DistroWatch.com: Debian |editore=DistroWatch.com |data=15 ottobre 2017 |url=https://distrowatch.com/table.php?distribution=debian |accesso=15 ottobre 2017}}</ref> |
||
| {{Version|o|3.5}}<ref>{{ |
| {{Version|o|3.5}}<ref>{{cita web|titolo=Debian -- Details of package python3 in stretch |url=https://packages.debian.org/stretch/python3 |accesso=19 dicembre 2017}}</ref> |
||
|- |
|- |
||
|[[Red Hat Enterprise Linux]] 8 |
|[[Red Hat Enterprise Linux]] 8 |
||
|2029 |
|2029 |
||
| {{Version|o|2.7}}<ref>{{ |
| {{Version|o|2.7}}<ref>{{cita web|titolo=Python in RHEL 8 |sito=Red Hat Developer Blog |lingua=en |data=14 novembre 2018 |url=https://developers.redhat.com/blog/2018/11/14/python-in-rhel-8/ |accesso=10 maggio 2019 |urlmorto=si |urlarchivio=https://web.archive.org/web/20190510043548/https://developers.redhat.com/blog/2018/11/14/python-in-rhel-8/ }}</ref> |
||
| {{Version|o|3.6}} |
| {{Version|o|3.6}} |
||
|- |
|- |
||
|Red Hat Enterprise Linux 7 |
|Red Hat Enterprise Linux 7 |
||
|2024-11-30<ref name=":0">{{Cita web|url=https://access.redhat.com/support/policy/updates/errata|sito=Red Hat Customer Portal| |
|2024-11-30<ref name=":0">{{Cita web|url=https://access.redhat.com/support/policy/updates/errata|titolo= |sito=Red Hat Customer Portal|accesso=1º aprile 2020}}</ref> |
||
| {{Version|o|2.7}}<ref>{{ |
| {{Version|o|2.7}}<ref>{{cita web|titolo=DistroWatch.com: Red Hat Enterprise Linux |editore=DistroWatch.com |data=7 settembre 2017 |url=https://distrowatch.com/table.php?distribution=redhat |accesso=15 ottobre 2017}}</ref> |
||
| |
| |
||
|- |
|- |
||
Riga 152: | Riga 152: | ||
|CentOS 7 |
|CentOS 7 |
||
|2024-06-30 |
|2024-06-30 |
||
| {{Version|o|2.7}}<ref>{{ |
| {{Version|o|2.7}}<ref>{{cita web|titolo=DistroWatch.com: CentOS |editore=DistroWatch.com |data=14 settembre 2017 |url=https://distrowatch.com/table.php?distribution=centos |accesso=15 ottobre 2017}}</ref> |
||
| |
| |
||
|- |
|- |
||
|SUSE Linux Enterprise Server 15 |
|SUSE Linux Enterprise Server 15 |
||
|2031-07-31 |
|2031-07-31 |
||
| {{Version|o|2.7}}<ref>{{ |
| {{Version|o|2.7}}<ref>{{cita web|titolo=Release Notes {{!}} SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA |sito=suse.com |url=https://www.suse.com/releasenotes/x86_64/SUSE-SLED/15/index.html#Features.Other |accesso=8 agosto 2019}}</ref> |
||
| {{Version|o|3.6}} |
| {{Version|o|3.6}} |
||
|- |
|- |
||
|SUSE Linux Enterprise Server 12 |
|SUSE Linux Enterprise Server 12 |
||
|2027-10-31 |
|2027-10-31 |
||
| {{Version|o|2.7}}<ref name="DistroWatch:openSUSE">{{ |
| {{Version|o|2.7}}<ref name="DistroWatch:openSUSE">{{cita web|titolo=DistroWatch.com: openSUSE |editore=DistroWatch.com |data=14 ottobre 2017 |url=https://distrowatch.com/table.php?distribution=opensuse |accesso=15 ottobre 2017}}</ref> |
||
| |
| |
||
|- |
|- |
||
Riga 174: | Riga 174: | ||
== Alternative == |
== Alternative == |
||
CPython è una delle numerose [[Python|implementazioni Python]]. Esistono però alternative tra cui: [[Jython]], scritto in [[Java (linguaggio di programmazione)|Java]] per la [[Macchina virtuale Java|Java virtual machine]] (JVM); [[PyPy]], scritto in [[PyPy|RPython]] e tradotto in C; e [[IronPython]], scritto in [[C sharp|C#]] per la [[Common Language Infrastructure]]. |
CPython è una delle numerose [[Python|implementazioni Python]]. Esistono però alternative tra cui: [[Jython]], scritto in [[Java (linguaggio di programmazione)|Java]] per la [[Macchina virtuale Java|Java virtual machine]] (JVM); [[PyPy]], scritto in [[PyPy|RPython]] e tradotto in C; e [[IronPython]], scritto in [[C sharp|C#]] per la [[Common Language Infrastructure]]. |
||
Sono numerose anche le implementazioni sperimentali. |
Sono numerose anche le implementazioni sperimentali.<ref>{{Cita libro|nome=Alex|cognome=Martelli|titolo=Python in a Nutshell|edizione=2nd|anno=2006|editore=[[O'Reilly Media|O'Reilly]]|pp=5–7|ISBN=978-0-596-10046-9|linkautore1=Alex Martelli}}</ref> |
||
== Note == |
== Note == |
||
<references/> |
<references/> |
||
⚫ | |||
⚫ |
Versione attuale delle 17:15, 22 nov 2024
CPython software | |
---|---|
Genere | Interprete linguaggio programmazione Python (non in lista) |
Sviluppatore | Guido van Rossum, sviluppatore Python core e comunità Python community supportati dalla Python Software Foundation |
Data prima versione | 26 gennaio 1994 |
Ultima versione | 3.13.0 (7 ottobre 2024) |
Sistema operativo | 42 piattaforme. Vedi capitolo Piattaforme_supportate (non in lista) |
Linguaggio | C c (linguaggio) e python (non in lista) |
Licenza | Python Software Foundation License (licenza libera) |
Lingua | Inglese |
Sito web | python.org, https://www.python.org/ . |
CPython è l' implementazione di riferimento del linguaggio Python. Scritto in C e Python, CPython è l'implementazione predefinita e più utilizzata del linguaggio Python.
CPython può essere definito sia come interprete che come compilatore. Quando viene eseguito uno script Python, CPython effettua una prima fase di compilazione del codice sorgente in un formato intermedio chiamato bytecode. Questo bytecode è una rappresentazione del codice Python ottimizzata per l'esecuzione dalla Python Virtual Machine. Successivamente, CPython interpreta questo bytecode riga per riga e le esegue una alla volta.
Progetto
[modifica | modifica wikitesto]Una caratteristica particolare di CPython è che utilizza Global Interpreter Lock (GIL), [1] un meccanismo che permette l'esecuzione di un solo thread Python alla volta su un singolo processore.[2] Questo non significa che il multithreading non abbia senso: ad esempio se il tuo codice è spesso in attesa di input/output, rilascia il GIL, permettendo ad altri thread di essere eseguiti.
Questa potrebbe essere la situazione tipica quando più thread servono client separati. Un thread potrebbe essere in attesa della risposta da un client, un altro potrebbe essere in attesa dell'esecuzione di una query al database, mentre il terzo thread sta elaborando il codice Python.
L'utilizzo di GIL rende CPython inadatto ai processi che implementano algoritmi ad alta intensità di CPU e che potrebbero essere distribuiti su più core.
Nelle applicazioni reali sono piuttosto rare le situazioni in cui il GIL rappresenta un collo di bottiglia significativo. Questo perché Python è un linguaggio intrinsecamente lento e generalmente non utilizzato per operazioni che richiedono un uso intensivo della CPU o che richiedono bassi tempi di risposta. Python è solitamente utilizzato ad alto livello e richiama funzioni e librerie per eseguire attività specializzate. Tali librerie non sono scritte in Python e, il codice Python in un altro thread, può essere eseguito mentre viene eseguita una chiamata a uno di questi processi sottostanti. Le librerie non Python non sono soggette a GIL e possono eseguire contemporaneamente molti thread su più processori senza restrizioni.
Per ottenere vera concorrenza in Python, è necessario ricorrere a processi dell'interprete Cpython separati e gestiti dal sistema operativo. La comunicazione tra processi separati può essere più complessa rispetto alla comunicazione tra thread. Il modulo multiprocessing offre alcune soluzioni, ma può ancora introdurre overhead.
La presenza del GIL semplifica l'implementazione di CPython e facilita l'implementazione di applicazioni multi-thread che non traggono vantaggio dall'esecuzione simultanea di codice Python. Senza GIL, la concorrenza diventerebbe responsabilità dello sviluppatore che dovrebbe gestire esplicitamente la sincronizzazione tra i diversi thread per evitare race conditions e altri problemi legati alla concorrenza.
Sebbene siano state avanzate numerose proposte per eliminare GIL ma considerando una serie di fattori complessi è stato deciso di mantenerlo. Sebbene GIL possa limitare le prestazioni in alcune applicazioni, offre un buon compromesso tra semplicità, stabilità e prestazioni per la maggior parte degli sviluppatori Python. Per consentire un maggiore parallelismo, nell'ottobre 2023 è stato rilasciato un miglioramento che permette l'utilizzo di un GIL separato per sotto-interprete in un singolo processo Python e sono stati descritti come "thread con condivisione opt-in".[3][4]
Dopo diversi dibattiti, nel 2023 è stato lanciato un progetto per proporre di rendere GIL opzionale dalla versione 3.13 di Python,[5] la cui uscita è prevista per ottobre 2024.[6]
Piattaforme supportate
[modifica | modifica wikitesto]Le piattaforme ufficialmente supportate a livello-1 sono Linux per Intel a 64 bit che utilizza una toolchain GCC, macOS per Intel a 64 bit e ARM e Microsoft Windows per Intel a 32 e 64 bit. Esiste un supporto ufficiale di livello 2 per Linux per ARM a 64 bit, wasm32 (Web Assembly) con supporto runtime WASI e Linux per Intel a 64 bit tramite una toolchain clang. I sistemi con supporto di livello 3 includono ARM Windows a 64 bit, iOS a 64 bit, Raspberry Pi OS (Linux per armv7 con hard float), Linux per PowerPC a 64 bit in modalità little-endian e Linux per s390x .
Altre piattaforme hanno implementazioni funzionanti, tra cui:[7]
Sistemi Unix-like:
[modifica | modifica wikitesto]Sistemi dedicati ed embedded:
[modifica | modifica wikitesto]- Android
- Apple iOS
- BlackBerry 10
- GP2X
- iPodLinux
- Nintendo DS
- GameCube
- Symbian OS Series60
- Nokia 770 Internet Tablet
- Nokia N800
- Nokia N810
- Nokia N900
- Openmoko
- Palm OS
- PlayStation 2
- PlayStation 3 (FreeBSD)
- Psion
- QNX
- Sharp Zaurus
- Xbox/XBMC
- VxWorks
Altri:
[modifica | modifica wikitesto]Enterprise Linux
[modifica | modifica wikitesto]Queste versioni di Python sono distribuite con le distribuzioni Linux enterprise attualmente supportate.[8] Lo stato del supporto di Python nella tabella si riferisce al supporto da parte del team principale di Python e non da parte del responsabile della distribuzione.
Distribution version | Distribution end-of-life | Python version | |
---|---|---|---|
Ubuntu 22.04 LTS (Jammy Jellyfish) | 3.10 [1] | ||
Ubuntu 20.04 LTS (Focal Fossa) | 2030-04[9] | [10] | [11] | 3.8
Ubuntu 18.04 LTS (Bionic Beaver) | 2028-04[12] | [13] | 2.7[14] | 3.6
Ubuntu 16.04 LTS (Xenial Xerus) | 2021-04-30[15] | [13] | 2.7[14] | 3.5
Debian 12 | 2028-06[16] | [16] | 3.11|
Debian 11 | 2026-06[17] | [17] | 3.9|
Debian 10 | 2024-06[18] | [19] | 2.7[20] | 3.7
Debian 9 | 2022-06-30[21] | [22] | 2.7[23] | 3.5
Red Hat Enterprise Linux 8 | 2029 | [24] | 2.73.6 |
Red Hat Enterprise Linux 7 | 2024-11-30[25] | [26] | 2.7|
CentOS 8 | 2029-05-31 | 2.7 | 3.6 |
CentOS 7 | 2024-06-30 | [27] | 2.7|
SUSE Linux Enterprise Server 15 | 2031-07-31 | [28] | 2.73.6 |
SUSE Linux Enterprise Server 12 | 2027-10-31 | [29] | 2.7|
SUSE Linux Enterprise Server 11 | 2022-03-31 | [29] | 2.7|
Vecchia versione Versione precedente ancora supportata Versione corrente |
Alternative
[modifica | modifica wikitesto]CPython è una delle numerose implementazioni Python. Esistono però alternative tra cui: Jython, scritto in Java per la Java virtual machine (JVM); PyPy, scritto in RPython e tradotto in C; e IronPython, scritto in C# per la Common Language Infrastructure.
Sono numerose anche le implementazioni sperimentali.[30]
Note
[modifica | modifica wikitesto]- ^ (EN) global interpreter lock in CPython, su docs.python.org.
- ^ docs.python.org, https://docs.python.org/3/c-api/init.html . URL consultato il 4 giugno 2020.
- ^ Jake Edge, lwn.net, https://lwn.net/Articles/941090/ . URL consultato il 13 gennaio 2024.
- ^ peps.python.org, https://peps.python.org/pep-0684/ . URL consultato il 13 gennaio 2024.
- ^ (EN) peps.python.org, https://peps.python.org/pep-0703/ . URL consultato il 17 settembre 2023.
- ^ peps.python.org, https://peps.python.org/pep-0719/#schedule . URL consultato il 17 settembre 2023.
- ^ wiki.python.org, https://wiki.python.org/moin/PythonImplementations . URL consultato il 19 luglio 2012.
- ^ linuxlifecycle.com, https://linuxlifecycle.com/ . URL consultato il 15 ottobre 2017.
- ^ Ubuntu, https://ubuntu.com/about/release-cycle . URL consultato il 18 gennaio 2021.
- ^ phoronix.com, https://www.phoronix.com/news/Python-2-EOL-Ubuntu-20.04 . URL consultato il 1º aprile 2020.
- ^ Binary package "python3" in ubuntu focal, su Launchpad.net.
- ^ serverwatch.com, https://www.serverwatch.com/server-news/canonical-extends-ubuntu-18.04-lts-linux-support-to-10-years.html . URL consultato il 9 settembre 2019.
- ^ a b python-defaults package: Ubuntu, su launchpad.net, Canonical Ltd., 8 giugno 2018. URL consultato l'8 giugno 2018.
- ^ a b python3-defaults package: Ubuntu, su launchpad.net, Canonical Ltd., 8 giugno 2018. URL consultato l'8 giugno 2018.
- ^ computing.cs.cmu.edu, https://computing.cs.cmu.edu/news/2020/eol-ubuntu-1604 . URL consultato il 15 febbraio 2021.
- ^ a b debian.org, https://www.debian.org/News/2023/20230610 .
- ^ a b debian.org, https://www.debian.org/News/2021/20210814.en.html . URL consultato il 4 gennaio 2022.
- ^ wiki.debian.org, https://wiki.debian.org/LTS . URL consultato il 15 febbraio 2021.
- ^ Debian -- Details of package python in buster, su packages.debian.org. URL consultato il 13 settembre 2019.
- ^ Debian -- News -- Debian 10 "buster" released, su debian.org. URL consultato il 9 agosto 2019.
- ^ debian.org, https://www.debian.org/News/2020/20200709.en.html . URL consultato il 15 febbraio 2021.
- ^ DistroWatch.com: Debian, su distrowatch.com, 15 ottobre 2017. URL consultato il 15 ottobre 2017.
- ^ Debian -- Details of package python3 in stretch, su packages.debian.org. URL consultato il 19 dicembre 2017.
- ^ (EN) Python in RHEL 8, su Red Hat Developer Blog, 14 novembre 2018. URL consultato il 10 maggio 2019 (archiviato dall'url originale il 10 maggio 2019).
- ^ Red Hat Customer Portal, https://access.redhat.com/support/policy/updates/errata . URL consultato il 1º aprile 2020.
- ^ DistroWatch.com: Red Hat Enterprise Linux, su distrowatch.com, 7 settembre 2017. URL consultato il 15 ottobre 2017.
- ^ DistroWatch.com: CentOS, su distrowatch.com, 14 settembre 2017. URL consultato il 15 ottobre 2017.
- ^ Release Notes | SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA, su suse.com. URL consultato l'8 agosto 2019.
- ^ a b DistroWatch.com: openSUSE, su distrowatch.com, 14 ottobre 2017. URL consultato il 15 ottobre 2017.
- ^ Alex Martelli, Python in a Nutshell, 2nd, O'Reilly, 2006, pp. 5–7, ISBN 978-0-596-10046-9.