CPython

CPython
原作者グイド・ヴァン・ロッサム
開発者Pythonコア開発者とPythonコミュニティ(Pythonソフトウェア財団がサポート)
初回リリース1994年1月26日 (1994年1月26日
安定版リリース
3.14.2 [ 1 ] ウィキデータで編集する / 2025年12月5日 (2025年12月5日
リポジトリhttps://github.com/python/cpython
書かれたCPython
プラットフォーム42のプラットフォーム。§配布を参照
入手可能な英語
タイプPython プログラミング言語インタープリタ
ライセンスPythonソフトウェア財団ライセンス
Webサイトwww.python.org

CPythonは、 Pythonプログラミング言語リファレンス実装です。CとPythonで記述されたCPythonは、Python言語のデフォルト実装であり、最も広く使用されています。

CPythonは、Pythonコードをバイトコードにコンパイルしてから解釈するため、インタプリタコンパイラの両方として定義できます。C言語を含む複数の言語との外部関数インターフェースを備えており、 Python以外の言語で 明示的にバインディングを記述する必要があります。

デザイン

CPythonの特徴は、グローバルインタープリタロック(GIL)を使用することです。これにより、各CPythonインタープリタプロセスでは、一度に1つのスレッドのみがバイトコードを処理できます。 [ 2 ]これは、マルチスレッドに意味がないという意味ではありません。最も一般的なマルチスレッドのシナリオでは、スレッドは主に外部プロセスの完了を待機します。

これは、複数のスレッドが別々のクライアントにサービスを提供している場合に発生する可能性があります。あるスレッドがクライアントからの応答を待機し、別のスレッドがデータベースクエリの実行を待機している間に、3つ目のスレッドが実際にPythonコードを処理している可能性があります。

ただし、GIL は、複数のコアに分散される可能性のある Python コードで CPU を集中的に使用するアルゴリズムを実装するプロセスには CPython が適していないことを意味します。

実際のアプリケーションでは、GILが重大なボトルネックとなる状況は非常に稀です。これは、Pythonが本質的に低速な言語であり、CPU負荷の高い処理や時間的制約のある処理には一般的に使用されないためです。Pythonは通常、トップレベルで使用され、ライブラリ内の関数を呼び出して特殊なタスクを実行します。これらのライブラリは通常Pythonで記述されておらず、これらの基盤となるプロセスのいずれかが呼び出されている間に、別のスレッドでPythonコードが実行される場合があります。CPU負荷の高いタスクを実行するために呼び出される非PythonライブラリはGILの影響を受けず、複数のプロセッサ上で多数のスレッドを制限なく同時に実行できます。

Pythonコードの並行処理は、マルチタスクオペレーティングシステムによって管理される個別のCPythonインタープリタプロセスによってのみ実現できます。これにより、同時実行中のPythonプロセス間の通信が複雑になりますが、マルチプロセッシングモジュールによってある程度軽減されます。つまり、Pythonコードの同時実行から真にメリットを享受できるアプリケーションを、オーバーヘッドを最小限に抑えて実装できるということです。

GILの存在により、CPythonの実装が簡素化され、Pythonコードの同時実行のメリットを享受できないマルチスレッドアプリケーションの実装が容易になります。しかし、GILがない場合、マルチプロセスアプリケーションでは、共通コードがスレッドセーフであることを確認する必要があります。

GILを廃止する提案は数多くなされてきたものの、ほとんどの場合、GILの利点が欠点を上回るという一般的なコンセンサスが得られています。GILがボトルネックとなる少数のケースでは、アプリケーションはマルチプロセス構造を中心に構築されるべきです。より多くの並列処理を可能にするため、2023年10月に、単一のPythonプロセス内のサブインタプリタごとに個別のGILを許可する改良版がリリースされました。これは「オプトイン共有機能を備えたスレッド」と表現されています。[ 3 ] [ 4 ]

数回の議論を経て、2023年にPythonのバージョン3.13からGILをオプションにすることを提案するプロジェクトが開始され、[ 5 ] 2024年10月7日にPython 3.13.0でリリースされました。[ 6 ] [ 7 ]

歴史

2009年に、GoogleがスポンサーとなったUnladen Swallowというブランチが作成され、CPythonにジャストインタイムコンパイラを組み込むことになりました。 [ 8 ] [ 9 ]開発は2011年に終了しましたが、メインの実装には統合されませんでした。 [ 10 ]ただし、cPickleモジュールの改良など、一部のコードは統合されました。[ 11 ] [ 8 ]

2021年には、「特殊化適応型インタープリタ」が提案されました。これは、見かけ上の安定性を示す一般的に実行される命令をより高速な型固有の命令に特殊化し、必要に応じて命令の特殊化を解除することで、パフォーマンスが10~60%向上すると測定されました。[ 12 ] SAIはPython 3.11で初めて搭載され、「pyperformance」ベンチマークスイートではPython 3.10よりも平均25%高速であることが測定されました。[ 13 ]

2024年、実験的なジャストインタイムコンパイラがCPythonのメイン開発ブランチに統合されました。この初期のJITはLLVM上に構築され、ホットコードパスの高速化を目的としています。統合時点では、このコンパイラはまだCPythonのデフォルトのビルド構成には含まれておらず、SAIとほぼ同等のパフォーマンスを提供していました。完全採用の条件の一つは、少なくとも5%のパフォーマンス向上でした。[ 14 ]デフォルトでは無効になっていますが、ユーザーはこれを有効にして実験し、Pythonが最終的に他のJIT言語に匹敵するようになるかどうかを確認できます。[ 15 ]

分布

公式にサポートされている Tier 1 プラットフォームは、GCC ツールチェーンを使用する 64 ビット Intel 向けLinux 、 64 ビット Intel および ARM 向けmacOS 、 32 ビットおよび 64 ビット Intel 向けMicrosoft Windowsです。公式の Tier 2 サポートは、64 ビット ARM 向け Linux、WASI ランタイム サポート付きの wasm32 ( Web Assembly )、および clang ツールチェーンを使用する 64 ビット Intel 向け Linux に対して存在します。公式にサポートされている Tier 3 システムには、64 ビット ARM Windows、64 ビット iOS、Raspberry Pi OS (ハード フロート付きの armv7 向け Linux)、リトルエンディアン モードの 64 ビット PowerPC 向け Linux、およびs390x向け Linux があります。

他にも多くのプラットフォームで実装が進んでおり、その中には次のようなものがある: [ 16 ]

Unixライク
特殊および埋め込み
他の

PEP 11 [ 17 ]には、Python Software FoundationによってCPythonでサポートされていないプラットフォームがリストされています。これらのプラットフォームは、外部ポートによって引き続きサポートできます。これらのポートには以下が含まれます。

  • AtheOS (2.6以降はサポートされていません)
  • BeOS (2.6以降はサポートされていません)
  • DOS (2.0 以降はサポートされていません)
  • IRIX 4 (2.3 以降はサポートされていません)
  • IRIX 5以降(3.2、3.7以降はサポート対象外)[ 18 ]
  • Mac OS 9 (2.4以降はサポートされていません)
  • MINIX (2.3以降はサポートされていません)
  • OpenVMS (3.3 以降はサポートされていません)
  • OS/2 (3.3 以降はサポートされていません)
  • RISC OS (3.0 以降はサポートされていません)
  • Windows: 一般的に、Windows バージョンは、Microsoft の延長サポート ライフサイクル ポリシーの対象となる限り、完全な Tier 1 サポートを受け続けます。Microsoft の延長サポート期間が終了した古いバージョンの Windows は、Python の次のメジャー リリース (XY0) ではサポートされなくなります。ただし、各リリース ブランチのバグ修正リリース (0.0.Z) では、最初の XY0 リリースでサポートされていたすべてのバージョンの Windows が引き続きサポートされます。組み込みシステムや IoT システムを対象とした Windows のエディションは、Python の公式サポート ポリシーの対象外です。
    • Windows 8 (2023 年 1 月 10 日以降、Python のメジャー リリースでは公式サポートされていません)
    • Windows 7 (2020 年 1 月 14 日以降、Python のメジャー リリースでは公式サポートされていません)
    • Windows Vista (3.9 以降はサポートされていません)
    • Windows XP (3.5 以降はサポートされていません)
    • Windows 2000 (3.3 以降はサポートされていません)
    • Windows 3.x (2.0 以降はサポートされていません)
    • Windows 9x (2.6 以降はサポートされていません)
    • Windows NT4 (2.6 以降はサポートされていません)

Python Software Foundation の公式 CPython バージョン(メイン開発サイトへのリンク付き)に統合されていない外部ポートには、PSP や SMS 用のグラフィックおよびサウンド API、S60 用のカメラ API など、プラットフォーム固有の機能のための追加モジュールが含まれていることがよくあります。これらのポートには以下が含まれます。

エンタープライズLinux

これらのPythonのバージョンは、現在サポートされているエンタープライズLinuxディストリビューションで配布されています。[ 26 ]表のPythonのサポート状況は、ディストリビューションのメンテナーからのサポートではなく、Pythonコアチームからのサポートを示しています。

エンタープライズLinux
配布バージョン 配布終了Pythonバージョン
Ubuntu 22.04 LTS (Jammy Jellyfish) 3.10 [1]
Ubuntu 20.04 LTS (Focal Fossa) 2030-04 [ 27 ][ 28 ]サポート対象:3.8 [ 29 ]
Ubuntu 18.04 LTS (バイオニックビーバー) 2028-04 [ 30 ]サポート対象外:2.7 [ 31 ]サポート対象外:3.6 [ 32 ]
Ubuntu 16.04 LTS (Xenial Xerus) 2021年4月30日[ 33 ]サポート対象外:2.7 [ 31 ]サポート対象外:3.5 [ 32 ]
デビアン12 2028-06 [ 34 ]サポート対象:3.11 [ 34 ]
デビアン11 2026-06 [ 35 ]サポート対象:3.9 [ 35 ]
デビアン 10 2024-06 [ 36 ]サポート対象外:2.7 [ 37 ]サポート対象:3.7 [ 38 ]
デビアン9 2022年6月30日[ 39 ]サポート対象外:2.7 [ 40 ]サポート対象外:3.5 [ 41 ]
レッドハットエンタープライズLinux8 2029 サポート対象外:2.7 [ 42 ]サポート対象外:3.6
レッドハットエンタープライズLinux7 2024年11月30日[ 43 ]サポート対象外:2.7 [ 44 ]
セントOS 8 2029年5月31日 サポート対象外:2.7サポート対象外:3.6
セントOS 7 2024年6月30日 サポート対象外:2.7 [ 45 ]
SUSE Linux Enterprise Server 15 2031年7月31日 サポート対象外:2.7 [ 46 ]サポート対象外:3.6
SUSE Linux Enterprise Server 12 2027年10月31日 サポート対象外:2.7 [ 47 ]
SUSE Linux Enterprise Server 11 2022年3月31日 サポート対象外:2.7 [ 47 ]
伝説:
サポートされていません
サポートされている
最新バージョン
プレビュー版
将来のバージョン

代替案

CPythonは、 Java仮想マシン(JVM)向けにJavaで記述されたJython 、 RPythonで記述されC言語に翻訳されたPyPy 、そして共通言語基盤向けにC#で記述されたIronPythonなど、いくつかの「製品品質」のPython実装の一つです。また、実験的な実装もいくつか存在します。[ 48 ]

参考文献

  1. ^ 「リリース 3.14.2」 2025年12月5日. 2025年12月7日閲覧
  2. ^ 「初期化、終了、そしてスレッド」 . Python v3.8.3ドキュメント. 2020年6月4日閲覧
  3. ^ Jake Edge (2023年8月15日). 「インタープリターごとのGIL」 . LWN . 2024年1月13日閲覧
  4. ^ "PEP 684 – インタプリタごとのGIL | peps.python.org" . 2024年1月13日閲覧。
  5. ^ "PEP 703 – CPythonでグローバルインタープリタロックをオプションにする | peps.python.org" . peps.python.org . 2023年9月17日閲覧
  6. ^ "PEP 719 – Python 3.13 リリーススケジュール | peps.python.org" . peps.python.org . 2023年9月17日閲覧
  7. ^ 「PythonリリースPython 3.13.0」 . Python.org . 2025年3月28日閲覧
  8. ^ a b Winter, Collin; Yasskin, Jeffrey; Kleckner, Reid (2010-03-17). 「PEP 3146 - Unladen Swallow を CPython に統合」 . Python.org.
  9. ^ "Unladen Swallow 2009Q1" . unladen-swallow, Pythonの高速実装. 2012年10月19日閲覧
  10. ^ Kleckner, Reid (2011年3月26日). 「Unladen Swallow Retrospective」 . QINSBはソフトウェアブログではありません (qinsb.blogspot.com) .
  11. ^ 「問題9410: Unladen Swallowの最適化をPython 3のpickleに追加する。 - Pythonトラッカー」。bugs.python.org 。 2019年8月8閲覧
  12. ^ Mark Shannon (2021年4月13日). 「PEP 659 – 適応型インタープリターの特化」 .
  13. ^ Pablo Galindo Salgado. 「Python 3.11の新機能 § PEP 659: 適応型インタープリタの特化」 .
  14. ^ Brandt Bucher、Savannah Ostrowski (2024年4月11日). 「PEP 744 – JIT コンパイル」 . 2025年2月5日閲覧
  15. ^ 「Python 3.13.3と今後の3.14の新機能 - 初心者向けガイド」 。 2025年4月25日閲覧
  16. ^ "PythonImplementations" . 2012年7月19日閲覧
  17. ^ 「PEP 11 -- あまり使用されていないプラットフォームのサポートの削除」 . Python.org . 2019年8月8日閲覧。
  18. ^ 「Irixはまだサポートされていますか?」 2009年2月14日。
  19. ^ 「AmigaPythonホームページ」www.monkeyhouse.eclipse.co.uk . 2025年2月20日閲覧
  20. ^ "I | シリーズ | Python" . I | シリーズ | Python . 2025年2月20日閲覧
  21. ^ 「PythonD 32bit Python for DOS and Windows」www.caddit.net . 2025年2月20日閲覧
  22. ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:start Python 2 および 3
  23. ^ 「Google Code アーカイブ - Google Code プロジェクト ホスティング用の長期ストレージ」 . code.google.com . 2025年2月20日閲覧
  24. ^ 「Python Windows CE ポート」 . SourceForge . 2018年1月22日. 2025年2月20日閲覧
  25. ^ 「パイソン」 . VSI 2021年8月31日閲覧
  26. ^ 「エンタープライズLinuxディストリビューションのサポートライフサイクル」 。 2022年8月30日時点のオリジナルよりアーカイブ2017年10月15日閲覧。
  27. ^ 「Ubuntuリリースサイクル」 . Ubuntu . 2021年1月18日閲覧
  28. ^ 「Python 2のサポート終了に伴い、Ubuntu 20.04 LTSもPython 2の削除に合わせて移行 - Phoronix」phoronix.com . 2020年4月1日閲覧
  29. ^ 「 Ubuntu FOCAL のバイナリ パッケージ「python3」」Launchpad.net
  30. ^ 「Ubuntu 18.04のサポート期間が2028年に延長」 ServerWatch.com、2018年11月15日。 2019年9月9日閲覧
  31. ^ a b「python-defaults パッケージ: Ubuntu」 . Canonical Ltd. 2018年6月8日. 2018年6月8日閲覧
  32. ^ a b「python3-defaults パッケージ: Ubuntu」 . Canonical Ltd. 2018年6月8日. 2018年6月8日閲覧
  33. ^ Science、カーネギーメロン大学コンピュータースクール。「Ubuntu 16.04 - 2021年にサポート終了 - SCSコンピューティング施設 - カーネギーメロン大学」。computing.cs.cmu.edu2021年2月15日閲覧
  34. ^ a b「Debian 12 bookworm がリリースされました。debian.org
  35. ^ a b「Debian -- ニュース -- Debian 11 "bullseye" リリース」。debian.org 。2021年8月14時点のオリジナルよりアーカイブ。 2022年1月4日閲覧
  36. ^ 「LTS - Debian Wiki」 . wiki.debian.org . 2021年2月15日閲覧
  37. ^ 「Debian -- busterのパッケージpythonの詳細」 . packages.debian.org . 2019年9月13日閲覧。
  38. ^ 「Debian -- ニュース -- Debian 10 "buster" リリース」 . debian.org . 2021年10月22日時点のオリジナルよりアーカイブ。 2019年8月9日閲覧
  39. ^ 「Debian -- ニュース -- Debian 8 長期サポートが終了」 debian.org . 2021年2月15日閲覧
  40. ^ 「DistroWatch.com: Debian」 . DistroWatch.com. 2017年10月15日. 2017年10月15日閲覧
  41. ^ 「Debian -- stretchのパッケージpython3の詳細」 。 2017年12月19日閲覧
  42. ^ 「RHEL 8 の Python」 . Red Hat 開発者ブログ. 2018年11月14日. 2019年5月10日時点のオリジナルよりアーカイブ。 2019年5月10日閲覧
  43. ^ 「Red Hat Enterprise Linux ライフサイクル」 . Red Hat カスタマーポータル. 2020年4月1日閲覧
  44. ^ 「DistroWatch.com: Red Hat Enterprise Linux」 . DistroWatch.com. 2017年9月7日. 2017年10月15日閲覧
  45. ^ 「DistroWatch.com: CentOS」 . DistroWatch.com. 2017年9月14日. 2017年10月15日閲覧
  46. ^ 「リリースノート | SUSE Linux Enterprise Desktop/SUSE Linux Enterprise Workstation Extension 15 GA」 . suse.com . 2019年8月8日閲覧
  47. ^ a b「DistroWatch.com: openSUSE」 . DistroWatch.com. 2017年10月14日. 2017年10月15日閲覧
  48. ^アレックス・マルテッリ(2006). Python in a Nutshell (第2版). O'Reilly . pp.  5– 7. ISBN 978-0-596-10046-9

さらに読む

  • Shaw, Anthony (2021). CPython Internals: Your Guide to the Python 3 Interpreter . Real Python. ISBN 9781775093343