用途
本技能用于在 Claude Code for web 环境中搭建并运行 Python 测试环境,专门解决 flox 不可用的情况。当项目在 pyproject.toml 中固定了特定 Python 版本(见 requires-python),而 web 环境的系统 Python 版本不同、uv python install <version> 又因该版本尚未被 uv 索引而失败时,uv sync 会因版本约束不匹配而报错。本技能提供绕过该问题的方案。
主要能力
- 从 python-build-standalone 的 GitHub releases 下载 pyproject.toml 所要求的精确 Python 版本。
- 提供自动检测所需版本的脚本:从 pyproject.toml 提取 requires-python,获取最新 release tag,匹配并下载 x86_64-unknown-linux-gnu-install_only.tar.gz 构建包。
- 使用下载的 Python 执行
uv sync并激活虚拟环境。 - 支持通过 hogli 或 pytest 直接运行单个测试、测试类方法或整个目录。
- 说明如何启动测试所需的后端 Docker 服务、配置 hosts、设置环境变量、创建前端构建占位文件、安装 SAML 依赖。
- 说明 pytest.ini 的关键配置项。
使用方式
- 自动检测并下载 Python:
REQUIRED_VERSION=$(grep requires-python pyproject.toml | grep -oP '[\d.]+')
echo "Required Python: $REQUIRED_VERSION"
RELEASE_TAG=$(curl -sL "https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest" | grep '"tag_name"' | cut -d'"' -f4)
DOWNLOAD_URL=$(curl -sL "https://api.github.com/repos/astral-sh/python-build-standalone/releases/latest" | \
grep "browser_download_url" | grep "$REQUIRED_VERSION" | grep "x86_64-unknown-linux-gnu-install_only.tar.gz" | head -1 | cut -d'"' -f4)
mkdir -p /tmp/python-install && cd /tmp/python-install
curl -L -o python.tar.gz "$DOWNLOAD_URL"
tar -xzf python.tar.gz
/tmp/python-install/python/bin/python3 --version
若自动检测未找到 URL(例如版本过新),需手动浏览 releases 页面,查找 cpython-<version>+<tag>-x86_64-unknown-linux-gnu-install_only.tar.gz 资源。
- 安装依赖并运行测试:
cd /home/user/posthog
uv sync --python /tmp/python-install/python/bin/python3
source .venv/bin/activate
hogli test path/to/test.py::TestClass::test_method -v
pytest path/to/test.py::TestClass::test_method -v
hogli test posthog/hogql/test/ -v
- Docker 服务:多数测试需要后端服务。若 Docker 可用:
docker compose -f docker-compose.dev.yml up -d
服务与端口清单见 docker-compose.dev.yml;部分测试目录在各自配置文件中记录了特定服务需求。
- hosts 文件配置:
echo "127.0.0.1 kafka clickhouse clickhouse-coordinator objectstorage" | sudo tee -a /etc/hosts
-
环境变量:测试需要 .github/workflows/ci-backend.yml 中定义的环境变量(见文件顶部 env: 部分)。本地开发默认值可复制 .env.example 为 .env。
-
前端 dist 占位文件:
mkdir -p frontend/dist
touch frontend/dist/index.html
touch frontend/dist/layout.html
touch frontend/dist/exporter.html
- SAML 依赖(如需要):
sudo apt-get update
sudo apt-get install libxml2-dev libxmlsec1-dev libxmlsec1-openssl
- pytest 配置:pytest.ini 设置了 pythonpath = . common、DJANGO_SETTINGS_MODULE = posthog.settings、DEBUG=1、TEST=1,默认忽略 --ignore=posthog/user_scripts --ignore=services/llm-gateway --ignore=common/ingestion/acceptance_tests。
适用场景
- 在 Claude Code for web 中运行 PostHog 后端 Python 测试。
- flox 不可用且系统 Python 版本与项目要求不符。
- 需要按 CI 配置复现测试环境。
限制
- Docker 不可用时,依赖服务的测试会失败。
- 下载 Python 需要访问 GitHub,存在网络限制。
- Temporal 测试需要额外的 Temporal 服务配置。
- 若按说明操作遇到困难,应停止并寻求用户指导,并建议用户更新本指南。
- 遇到安装问题时,应以 .github/workflows/ci-backend.yml 作为权威 CI 配置参考(其中包含 CI 使用的精确 Python 版本、安装的系统依赖、设置的环境变量、Docker 服务配置和测试执行命令)。