AgentSkillsCN

python

在为Python项目配置开发容器时使用此功能。涵盖Python特性、虚拟环境、工具安装、JupyterLab,以及linter/formatter设置。 适用场景:Python开发容器设置、Python特性配置、虚拟环境、JupyterLab、pip/uv/poetry工具链。 不适用场景:.NET开发容器(使用.NET)、TypeScript开发容器(使用TypeScript)、通用devcontainer.json(使用devcontainer)。

SKILL.md
--- frontmatter
name: python
description: |
    Use when configuring dev containers for Python projects. Covers the Python feature, virtual environments, tool installation, JupyterLab, and linter/formatter setup.
    USE FOR: Python dev container setup, Python feature configuration, virtual environments, JupyterLab, pip/uv/poetry tooling
    DO NOT USE FOR: .NET dev containers (use dotnet), TypeScript dev containers (use typescript), general devcontainer.json (use devcontainer)
license: MIT
metadata:
  displayName: "Dev Container — Python"
  author: "Tyler-R-Kendrick"
compatibility: claude, copilot, cursor

Dev Container — Python

Overview

Configure a dev container for Python development using the official Python feature or base image. Supports version selection, tool installation via pipx, virtual environments, and JupyterLab.

Python Feature

jsonc
{
  "features": {
    "ghcr.io/devcontainers/features/python:1": {
      "version": "3.12"
    }
  }
}

Feature Options

OptionDefaultDescription
versionlatestPython version (3.12, 3.11, latest, os-provided, none)
installToolstrueInstall tools listed in toolsToInstall via pipx
toolsToInstallflake8,autopep8,black,yapf,mypy,pydocstyle,pycodestyle,bandit,pipenv,virtualenv,pytest,pylintComma-separated tools
installJupyterlabfalseInstall JupyterLab
optimizefalseCompile Python with optimizations (slower build)
installPath/usr/local/pythonInstallation directory

Full Example

jsonc
{
  "name": "Python 3.12 Development",
  "image": "mcr.microsoft.com/devcontainers/python:3.12",
  "features": {
    "ghcr.io/devcontainers/features/github-cli:1": {}
  },
  "forwardPorts": [8000],
  "portsAttributes": {
    "8000": { "label": "App", "onAutoForward": "notify" },
    "8888": { "label": "Jupyter", "onAutoForward": "notify" }
  },
  "postCreateCommand": "pip install -r requirements.txt",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-python.python",
        "ms-python.vscode-pylance",
        "ms-python.black-formatter",
        "charliermarsh.ruff"
      ],
      "settings": {
        "python.defaultInterpreterPath": "/usr/local/bin/python",
        "[python]": {
          "editor.defaultFormatter": "charliermarsh.ruff",
          "editor.formatOnSave": true
        }
      }
    }
  }
}

Using the Base Image vs Feature

ApproachWhen to Use
"image": "mcr.microsoft.com/devcontainers/python:3.12"Python-only projects
Base image + ghcr.io/devcontainers/features/python:1Multi-language projects

Virtual Environments

jsonc
{
  "postCreateCommand": "python -m venv .venv && . .venv/bin/activate && pip install -r requirements.txt",
  "containerEnv": {
    "VIRTUAL_ENV": "/workspace/.venv",
    "PATH": "/workspace/.venv/bin:${containerEnv:PATH}"
  }
}

JupyterLab

jsonc
{
  "features": {
    "ghcr.io/devcontainers/features/python:1": {
      "version": "3.12",
      "installJupyterlab": true
    }
  },
  "forwardPorts": [8888],
  "postStartCommand": "jupyter lab --ip=0.0.0.0 --no-browser --NotebookApp.token=''"
}

Poetry / uv / PDM

For modern package managers, install them in postCreateCommand:

jsonc
{
  "postCreateCommand": "pip install uv && uv sync",
  "containerEnv": {
    "UV_LINK_MODE": "copy"
  }
}

Best Practices

  • Use the dedicated mcr.microsoft.com/devcontainers/python image for Python-only projects.
  • Pin the Python version to a minor release (3.12, 3.11) for reproducibility.
  • Prefer Ruff over separate flake8/black installs — it replaces multiple tools with a single fast one.
  • Use postCreateCommand for pip install so dependencies are cached in Codespaces prebuilds.
  • Set python.defaultInterpreterPath in VS Code settings to avoid interpreter selection prompts.
  • For data science projects, enable installJupyterlab in the feature and forward port 8888.
  • Use containerEnv to configure VIRTUAL_ENV if your project expects a venv.