模板將穩定的系統依賴、語言運行時、工具鏈和基礎代碼固化為可複用的運行環境。構建一次後,可以基於同一模板建立多個相互獨立的沙箱;更新模板不會影響已經運行中的沙箱。
使用者資料、臨時檔案和頻繁變化的業務狀態應在沙箱運行時寫入。密鑰、Token 等敏感憑證不要寫入模板,應在建立沙箱時通過環境變數注入。
前提條件
準備一個雲沙箱可訪問的 E2B 相容鏡像。首次體驗可使用 構建和系統管理範本 中的官方鏡像。
擷取串連參數
E2B_API_KEY、E2B_API_URL和E2B_DOMAIN。SDK 會自動讀取這三個環境變數,下方樣本無需在方法調用中顯式傳入。參數詳情見 E2B SDK 接入參數說明。
安裝 Python SDK:
python3 -m venv .venv
source .venv/bin/activate
pip install e2b==2.31.0 python-dotenv建立 .env 檔案:
E2B_API_KEY=e2b_xxx
FROM_IMAGE="fc-e2b-registry.cn-beijing.cr.aliyuncs.com/runtime/code-interpreter-v1:v0.0.44"
E2B_API_URL=https://api.cn-beijing.e2b.fc.aliyuncs.com
E2B_DOMAIN=cn-beijing.e2b.fc.aliyuncs.com構建模板並建立沙箱
下面從鏡像構建模板,並使用返回的模板 ID 建立沙箱。
import os
import time
from dotenv import load_dotenv
from e2b import Sandbox, Template, default_build_logger
load_dotenv()
# SDK 自動讀取 E2B_API_KEY / E2B_API_URL / E2B_DOMAIN 環境變數。
# 從鏡像定義並構建模板。
build = Template.build(
Template().from_image(os.environ["FROM_IMAGE"]),
name=f"template-{int(time.time())}",
cpu_count=2,
memory_mb=2048,
on_build_logs=default_build_logger(),
)
# 使用剛構建的模板建立沙箱。
sandbox = Sandbox.create(template=build.template_id, timeout=900)
try:
print(f"template_id: {build.template_id}")
print(f"sandbox_id: {sandbox.sandbox_id}")
finally:
sandbox.kill()TypeScript 樣本:
import { Sandbox, Template, defaultBuildLogger } from "e2b";
// SDK 自動讀取 E2B_API_KEY / E2B_API_URL / E2B_DOMAIN 環境變數。
// 從鏡像定義並構建模板。
const build = await Template.build(
Template().fromImage(process.env.FROM_IMAGE),
`template-${Date.now()}`,
{ cpuCount: 2, memoryMB: 2048, onBuildLogs: defaultBuildLogger() },
);
// 使用剛構建的模板建立沙箱。
const sandbox = await Sandbox.create(build.templateId, { timeoutMs: 900_000 });
try {
console.log(`template_id: ${build.templateId}`);
console.log(`sandbox_id: ${sandbox.sandboxId}`);
} finally {
await sandbox.kill();
}