スキル一覧に戻る
gpshead

build

by gpshead

8🍴 0📅 2026年1月14日
GitHubで見るManusで実行

SKILL.md


name: build description: Use this skill when you need to compile CPython, run tests, verify your changes work, check if a fix is correct, or debug test failures. Covers building from source with ./configure and make, ccache for faster rebuilds, Argument Clinic regeneration, and the unittest-based test system (NOT pytest). Essential for any task that requires running code or tests.

Building and Testing CPython

Building CPython

ONLY build in a build/ subdirectory at repo root. Never build in the source tree.

Setup and Configuration

# Build directory setup
REPO_ROOT=<path-to-cpython-git-repo>
BUILD_DIR=$REPO_ROOT/build

ccache Setup (Recommended)

ccache dramatically speeds up rebuilds by caching compilation results. Check if available:

which ccache

If ccache is not installed:

  • macOS (Homebrew): Install directly with brew install ccache (no sudo required)
  • Containerized/root environments: Install directly with apt-get install -y ccache or dnf install -y ccache
  • Otherwise, ask the user for permission to install:
    • Debian/Ubuntu: sudo apt-get install ccache
    • Fedora/RHEL: sudo dnf install ccache

Configure with ccache (if available):

cd $BUILD_DIR && CC="ccache gcc" ../configure --with-pydebug

Configure without ccache (fallback):

cd $BUILD_DIR && ../configure --with-pydebug

Performance/Benchmarking Builds

When doing benchmarking or performance measurement of C code changes, omit --with-pydebug from configure:

cd $BUILD_DIR && CC="ccache gcc" ../configure  # No --with-pydebug

Debug builds have significant overhead that distorts performance measurements. However, do not use --enable-optimizations unless explicitly asked—it enables PGO (Profile-Guided Optimization) which is slow to compile. Non-PGO release builds are sufficient for the majority of performance comparison work.

# Build using all CPU cores (initial or incremental)
make -C $BUILD_DIR -j $(nproc)

Platform notes:

  • Linux: BUILT_PY=$BUILD_DIR/python
  • macOS: BUILT_PY=$BUILD_DIR/python.exe (note .exe extension)
  • Windows: Ask user how to build (uses Visual Studio, different process)

Argument Clinic

After editing .c files that change function signatures, docstrings, or argument specs:

make -C $BUILD_DIR clinic

NEVER edit files in **/clinic/** subdirectories - they're auto-generated.

Verify Build

$BUILT_PY --version
$BUILT_PY -c "print('Hello from CPython!')"

Build Troubleshooting

  • Missing dependencies: Configure reports missing libraries
  • Stale build: make clean in BUILD_DIR and rebuild
  • Clinic files out of sync: make -C $BUILD_DIR clinic
  • Clean build: rm -rf $BUILD_DIR && mkdir $BUILD_DIR && cd $BUILD_DIR && CC="ccache gcc" ../configure --with-pydebug && make -j $(nproc) (omit CC=... if ccache unavailable)

Running CPython Tests

Critical rules:

  1. NEVER use pytest - CPython tests are unittest based
  2. Use --match not -k for filtering - takes a glob pattern (this is not pytest!)

Prerequisite: BUILT_PY=build/python or build/python.exe

Running Tests

# Single test module (recommended - proper discovery, parallel execution)
$BUILT_PY -m test test_zipfile -j $(nproc)

# Multiple modules
$BUILT_PY -m test test_csv test_json -j $(nproc)

# Direct execution (quick but may miss test packages)
$BUILT_PY Lib/test/test_csv.py

# Specific test by glob pattern (use --match, NOT -k!)
$BUILT_PY -m test test_zipfile --match "*large*" -j $(nproc)
$BUILT_PY -m test test_csv --match "TestDialect*"
$BUILT_PY -m test test_json --match "TestEncode.test_encode_string"

# Full test suite (ASK FIRST - takes significant time!)
make -C $BUILD_DIR test

# Useful flags: -v (verbose), -f (fail fast), --timeout 120 (detect hangs), --list-tests, --help

Test packages (directories like test_asyncio/) require load_tests() in __init__.py to work with python -m test.

Code Coverage

# Collect coverage (uses trace mechanism via libregrtest)
$BUILT_PY -m test --coverage test_csv test_json --coveragedir .claude/coverage/ -j $(nproc)

# Reports go to specified coveragedir

Debugging

For interactive debugging (pdb/lldb/gdb) or testing REPL features: Control a tmux session.

Add breakpoint() in test code, then run with -v for verbose output.

スコア

総合スコア

55/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

0/5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です