1.

Python(.py/.pyc)完全ガイド — 動的型・CPython/PyPy/Jython・pip/venv・PEP 8・型ヒント・shebang

編集
この記事の要点
  • Python は Guido van Rossum が 1991 年に公開した汎用プログラミング言語で、可読性の高い構文と「電池付き」と呼ばれる豊富な標準ライブラリを特徴とする
  • インタプリタ方式・動的型付けで、コンパイル時に .pyc バイトコードが __pycache__/ に生成される
  • 主要実装は CPython(リファレンス)、PyPy(JIT で高速)、Jython(JVM 上)、IronPython(.NET 上)など
  • パッケージ管理は pip、仮想環境は venv / virtualenv / poetry / uv など複数の選択肢
  • コーディング規約 PEP 8 と、Python 3.5 以降の型ヒント(typing モジュール)が広く普及している
  • Unix 系では shebang #!/usr/bin/env python3 を 1 行目に書けばスクリプトとして直接実行可能
  • AI・機械学習・データ分析・Web 開発・自動化スクリプトまで幅広く採用され、TIOBE / PYPL ランキング常連の人気言語

概要

Python(パイソン) は、オランダ人プログラマ Guido van Rossum(グイド・ヴァン・ロッサム)が 1991 年に最初のバージョンを公開した汎用プログラミング言語です。名前の由来は英国コメディ番組「Monty Python's Flying Circus」で、ヘビとは無関係ですが、ロゴには 2 匹のヘビがあしらわれています。設計思想は 「There should be one-- and preferably only one --obvious way to do it.(やり方は 1 つ、できれば唯一であるべき)」(The Zen of Python)に代表されるように、可読性と一貫性を最優先しています。

Python の型システムは 動的型付け・強い型 です。変数に型宣言は不要で実行時に型が決まりますが、文字列と整数の暗黙的な変換は行わない("a" + 1 はエラー)など、JavaScript のように型が「曖昧に変換される」ことはありません。Python 3.5 で typing モジュールが追加されてからは、def add(x: int, y: int) -> int: のような 型ヒント が広く使われ、mypy / pyright / pyre による静的解析が可能になりました。ただし型ヒントは実行時に強制されず、ドキュメント+外部チェッカ用です。

実行モデルは インタプリタ ですが、内部では .pyバイトコード(.pyc にコンパイルしてから Python 仮想マシンで実行します。バイトコードは __pycache__/ ディレクトリに自動生成され、再実行時のパース時間を短縮します。リファレンス実装は C で書かれた CPython で、Python と言えば通常これを指します。代替実装に PyPy(独自 JIT で 4〜10 倍高速)、Jython(JVM)、IronPython(.NET CLR)、MicroPython(マイコン向け)などがあります。

ファイル種類とビルド成果物

拡張子役割備考
.pyソースコード(テキスト)UTF-8 が標準。Python 3 では BOM 不要
.pycコンパイル済みバイトコード__pycache__/モジュール名.cpython-312.pyc のように Python バージョン入り
.pyo最適化済みバイトコード(旧)Python 3.5 以降は .pyc に統合され廃止
.pydWindows 用 C 拡張モジュール実体は DLL。import 可能
.pyi型スタブファイルシグネチャだけ書く。typeshed で標準ライブラリのスタブを配布
.pywWindows 用 GUI スクリプトコンソールを開かずに起動
.whlWheel パッケージpip でインストールするバイナリ配布形式
.egg旧配布形式(非推奨)Wheel に移行済み

「Hello, World」

#!/usr/bin/env python3
"""hello.py — 最小の Python プログラム"""

def greet(name: str) -> str:
    return f"Hello, {name}!"

if __name__ == "__main__":
    print(greet("World"))

1 行目の shebang #!/usr/bin/env python3 を書き、chmod +x hello.py で実行権を付ければ Unix 系では ./hello.py で直接起動できます。if __name__ == "__main__": イディオムは、ファイルが import された場合に実行を抑制する慣用句で、Python では ほぼ必須のお作法 です。

パッケージ管理・ビルドツール

  • pip:Python 標準のパッケージインストーラ。pip install requestsPyPI から取得
  • venv / virtualenv:プロジェクトごとに独立した Python 環境を作る。python -m venv .venvsource .venv/bin/activate
  • poetrypyproject.toml 1 本で依存・ビルド・公開まで管理する近代的ツール
  • uv:Rust 製の超高速 pip 互換ツール(2024 年〜急速に普及)
  • conda:Anaconda / Miniconda 由来。バイナリ依存(NumPy/SciPy 等)を含むデータサイエンス向け
  • pipx:CLI ツール(blackruff 等)を隔離環境にインストール
  • setuptools / build / hatchling:ライブラリを Wheel にパッケージング

関連言語との比較

項目PythonRubyJavaScriptGo
登場年1991199519952009
型システム動的・強動的・強動的・弱静的・強
実行モデルバイトコード VMバイトコード VM(YARV)JITネイティブコンパイル
主な用途AI・科学計算・Web・自動化Web(Rails)Web フロント・サーバサーバ・CLI・ミドルウェア
パッケージpip / PyPIgem / RubyGemsnpmgo mod
並行性GIL あり(CPython)GVL あり(MRI)イベントループGoroutine

注意点・落とし穴

  • GIL(Global Interpreter Lock):CPython では同時に 1 スレッドしか Python バイトコードを実行できない。CPU バウンド処理は multiprocessing や C 拡張で回避。Python 3.13 で実験的に GIL 無効化オプションが追加された
  • インデント=構文:ブロックは {} ではなくインデントで決まる。タブとスペースの混在は TabError になるので スペース 4 つに統一(PEP 8)
  • ミュータブルなデフォルト引数def f(x=[]): のデフォルトは関数定義時に 1 回だけ評価され、呼び出し間で共有される。None を使うのが定石
  • 2 系と 3 系の非互換:Python 2 は 2020-01 で EOL。print 文、unicode/str の扱いなどが大きく変わった
  • __pycache__ のコミット禁止.gitignore に必ず追加
  • 循環インポート:モジュール間で相互 import すると順序によって失敗する。設計で回避

関連リンク

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Python(.py / .pyc)
  2. JavaScript(.js / .mjs / .cjs)
  3. TypeScript(.ts / .tsx)
  4. Go(.go)
  5. Rust(.rs)
  6. Java(.java / .class / .jar)
  7. C / C++(.c / .h / .cpp / .hpp)
  8. Ruby(.rb)
  9. Swift(.swift)
  10. Kotlin(.kt / .kts)

最近更新/作成されたページ