Den här guiden tar dig från ingenting till en fungerande sandlåda i Python. Du startar en isolerad Firecracker-microVM, kör kod i den, installerar ett paket, flyttar en fil in och ut och kör något långt i bakgrunden. Varje steg är några rader att klistra in.
Du behöver Python 3.8 eller senare och ett EQVPS-konto. SDK:t har inga beroenden.
1. Skaffa en token
Sandlådor betalas från kontots saldo, så SDK:t behöver en kontotoken. Koppla ditt konto visar de tre sätten att få en: kontrollpanelen, API:t eller MCP-servern. Lägg den sedan i miljön:
export EQVPS_API_KEY="your-token"
Inget saldo än? Inga problem. Första gången ett nytt konto skapar en sandlåda utan tillräckligt saldo får det 1 $ sandlådekredit, giltig i 14 dagar.
2. Installera SDK:t
pip install eqvps
3. Starta en sandlåda och kör kod
Spara detta som hello.py och kör det:
from eqvps import Sandbox
with Sandbox.create(tariff="small") as sb:
print(sb.id)
r = sb.run("import platform; print(platform.python_version())")
print(r.exit_code, r.stdout)
Du ser sandlådans id (sb_ och 24 tecken till) och sedan 0 3.12.x. Sandlådan startade på ungefär en sekund, körde koden och raderades när with-blocket tog slut.
Bra att veta om resultatet:
r.okär true när avslutningskoden är 0 och kommandot inte slog i tidsgränsen;- en avslutningskod som inte är noll är inte ett undantag, så kontrollera
r.oksjälv; stdoutochstderrär begränsade till 1 MiB vardera, ochr.truncatedtalar om ifall utdata kapats.
4. Installera ett paket och kör skalkommandon
I sandlådan är du root på ett litet Linux-system med Python, Node.js, git och curl. exec kör vilket skalkommando som helst:
from eqvps import Sandbox
with Sandbox.create(tariff="small") as sb:
sb.exec("pip install --quiet requests", timeout=55)
r = sb.run("import requests; print(requests.get('https://example.com').status_code)")
print(r.stdout) # 200
Standardtidsgränsen är 30 sekunder och ett synkront anrop får ta högst 55. Stora installationer hör hemma i en bakgrundsuppgift (steg 6).
5. Flytta filer in och ut
from eqvps import Sandbox
with Sandbox.create() as sb:
sb.upload("/root/data.csv", "a,b\n1,2\n3,4\n")
sb.run("""
import csv
rows = list(csv.DictReader(open('/root/data.csv')))
open('/root/sum.txt', 'w').write(str(sum(int(r['b']) for r in rows)))
""")
print(sb.download_text("/root/sum.txt")) # 6
Sökvägar måste vara absoluta. En överföring är begränsad till 5 MB; download returnerar bytes, download_text en sträng.
6. Kör ett långt jobb i bakgrunden
Skicka med background=True så får du en uppgift i stället för att vänta. Den har ingen gräns på 55 sekunder:
from eqvps import Sandbox
with Sandbox.create(tariff="standard") as sb:
task = sb.exec("for i in 1 2 3 4 5; do echo step $i; sleep 20; done", background=True)
result = task.wait(on_output=lambda out, err: print(out, end=""))
print(result.state, result.exit_code) # done 0
task.wait() frågar var 2:a sekund och skriver ut ny utdata så fort den kommer. Du kan också själv anropa task.logs(), eller task.kill() för att stoppa den. Så länge en uppgift körs raderas sandlådan inte på grund av inaktivitet.
Vad det kostade
Varje with-block ovan levde några sekunder och debiterades minimitiden på 60 sekunder. På small blir det 0,00055 $ per block, så alla fem exemplen tillsammans kostar ungefär en tredjedels cent. Priser för alla tariffer, det beständiga läget och utgiftstak finns i sandlådors gränser och debitering.
När något går fel
Fel från API:t är undantag som du kan fånga:
from eqvps import Sandbox, InsufficientBalanceError, RateLimitError
try:
with Sandbox.create() as sb:
print(sb.run("print(1)").stdout)
except InsufficientBalanceError:
print("Top up the balance")
except RateLimitError as e:
print("Too many at once, retry in", e.retry_after)
SDK:t gör redan om 429- och 503-svar upp till tre gånger när servern säger hur länge man ska vänta. Alla 11 felklasser finns i SDK-referensen.
Nästa steg
- Samma steg i JavaScript: TypeScript-SDK för sandlådor på 5 minuter.
- Låt en AI-modell skriva koden och köra den här: din första agentuppgift i en sandlåda.
- Tariffer, provperioden och vad som finns i en sandlåda: sandlådesidan.
Kommentarer
Inga kommentarer än. Bli först.