python/ 目录放运行时与审计器,pyhost/ 放嵌入 CPython 的 Executor 宿主。整体架构见 架构总览,目录分层见 仓库结构。
前置依赖
外部服务在本地开发中都有替身,不需要先搭 etcd、BlockDB、Meta 或链节点:
快速开始
按照快速开始准备依赖、构建 Worker 与 Executor 宿主,并提交本地任务。启动命令集中维护在那里。 修改 EVM 运行时桥接时,可先运行:Makefile 目标
环境变量与配置文件
worker 的加载顺序在internal/worker/app/app.go 里:DefaultWorkerFullConfig() → profile 的 TuneDefaults → WORKER_CONFIG 指向的 JSON 文件(LoadWorkerFullConfigFrom)→ 环境变量覆盖。JSON 字段名与 WorkerFullConfig 的 json tag 一致,示例见 blockx 仓库 docs/deploy.md §9.3。coordinator 只读环境变量,没有配置文件(internal/coordinator/app/config.go 的 LoadCoordinatorRuntimeConfigFromEnv)。
本地开发最常碰到的变量:
完整表(含 AIMD、gRPC keepalive、Iceberg cache 等几十项)见 blockx 仓库
docs/deploy.md §9;deploy/env/worker.env.example 是 EC2 部署用的 env 文件样例,包含大量宿主机脚本才读的键,不适合直接拿来本地跑。
代码生成
改了.proto 后重新生成 Go 绑定:
Makefile 会把 $(go env GOBIN)(或 $(go env GOPATH)/bin)加进 PATH,所以插件装在默认位置即可。proto 源文件位置:api/grpc/*/ 与 internal/sdk/{blockdb,meta,localtestservice}/proto/。生成结果要一起提交。
常见问题
E2E 全部显示 SKIP,提示 Python dependencies not available
E2E 全部显示 SKIP,提示 Python dependencies not available
先安装
python/pyproject.toml 固定的依赖,并确认 Executor 宿主可以构建。共享进程测试环境由 internal/testutil/pyhost.go 准备。go build ./cmd/worker 报 build constraints exclude all Go files in duckdb-go-bindings/lib
go build ./cmd/worker 报 build constraints exclude all Go files in duckdb-go-bindings/lib
这是
CGO_ENABLED=0 的症状。worker 与 bundle_worker 必须开 CGO,并且机器上要有 C 编译器。首次链接较慢属正常。worker 启动直接退出:invalid worker config
worker 启动直接退出:invalid worker config
看错误串:
icebergNamespace must not be empty 补 ICEBERG_NAMESPACE;plugin BlockTableWriteHandler requires blockdb.batchWriteAddr(仅 cmd/bundle_worker)补 BLOCKDB_BATCH_WRITE_ADDR;usage 相关错误补 BLOCKX_USAGE_DISABLED=true。worker 起来了但 Coordinator 看不到它
worker 起来了但 Coordinator 看不到它
检查
ETCD_ENDPOINTS 是否指向同一个 etcd,以及 WORKER_ADDR 是否是 Coordinator 可达的地址;容器网络隔离时必须显式设置(docs/deploy.md §7)。本地单机调试可以直接 ETCD_ENDPOINTS=none 绕过 Coordinator。Python executor 子进程没起来
Python executor 子进程没起来
检查
EXECUTOR_HOST_BIN 是否指向已构建的宿主,以及 PYTHONPATH 是否包含运行时与虚拟环境依赖。启动步骤见快速开始。go mod download 拉不到 github.com/Chaintable/*
go mod download 拉不到 github.com/Chaintable/*
这些是私有模块。配置 git 凭据(例如
git config --global url."git@github.com:".insteadOf "https://github.com/"),并设 GOPRIVATE=github.com/Chaintable/*。Python 侧的 blockx-py 等也是私有 git 依赖,同样需要凭据。