−25%

på Windows ved årlig betaling, til 31/10. Se pakkerne

EQVPS
Kom i gang

Python-SDK til sandkasser på 5 minutter: fra pip install eqvps til første kørsel

Installér EQVPS' Python-SDK, start en Firecracker-sandkasse, kør kode, installér en pakke, flyt filer og kør et langt job i baggrunden. Seks trin med alle kommandoer, og det hele koster under en cent.

Denne guide tager dig fra ingenting til en fungerende sandkasse i Python. Du starter en isoleret Firecracker-microVM, kører kode i den, installerer en pakke, flytter en fil ind og ud og kører noget langt i baggrunden. Hvert trin er et par linjer, du kan indsætte.

Du skal bruge Python 3.8 eller nyere og en EQVPS-konto. SDK'et har ingen afhængigheder.

1. Skaf en token

Sandkasser betales fra kontoens saldo, så SDK'et skal bruge en kontotoken. Forbind din konto viser de tre måder at få en på: kontrolpanelet, API'et eller MCP-serveren. Læg den derefter i miljøet:

export EQVPS_API_KEY="your-token"

Ingen saldo endnu? Det gør ikke noget. Første gang en ny konto opretter en sandkasse uden nok saldo, får den 1 $ i sandkassekredit, gyldig i 14 dage.

2. Installér SDK'et

pip install eqvps

3. Start en sandkasse og kør kode

Gem dette som hello.py og 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 sandkassens id (sb_ og 24 tegn mere) og derefter 0 3.12.x. Sandkassen startede på cirka et sekund, kørte koden og blev slettet, da with-blokken sluttede.

Godt at vide om resultatet:

  • r.ok er true, når exitkoden er 0, og kommandoen ikke ramte sin timeout;
  • en exitkode forskellig fra nul er ikke en exception, så tjek selv r.ok;
  • stdout og stderr er begrænset til 1 MiB hver, og r.truncated fortæller, om output blev skåret af.

4. Installér en pakke og kør shellkommandoer

I sandkassen er du root på et lille Linux-system med Python, Node.js, git og curl. exec kører enhver shellkommando:

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

Standardtimeouten er 30 sekunder, og et synkront kald må højst tage 55. Store installationer hører hjemme i en baggrundsopgave (trin 6).

5. Flyt filer ind og ud

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

Stier skal være absolutte. En overførsel er begrænset til 5 MB; download returnerer bytes, download_text en streng.

6. Kør et langt job i baggrunden

Giv background=True med, og du får en opgave i stedet for at vente. Den har ingen grænse 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() spørger hvert 2. sekund og udskriver nyt output, så snart det kommer. Du kan også selv kalde task.logs(), eller task.kill() for at stoppe den. Så længe en opgave kører, slettes sandkassen ikke på grund af inaktivitet.

Hvad det kostede

Hver with-blok ovenfor levede et par sekunder og blev afregnet med minimum på 60 sekunder. På small er det 0,00055 $ pr. blok, så alle fem eksempler tilsammen koster omkring en tredjedel cent. Priser for alle tariffer, den vedvarende tilstand og forbrugslofter står i grænser og afregning for sandboxes.

Når noget går galt

Fejl fra API'et er exceptions, du kan fange:

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'et prøver allerede 429- og 503-svar igen op til tre gange, når serveren siger, hvor længe man skal vente. Alle 11 fejlklasser står i SDK-referencen.

Næste skridt

FAQ

Skal jeg bruge et betalingskort for at prøve det?

Nej. En ny konto får 1 $ i sandkassekredit, første gang den opretter en sandkasse uden nok saldo. Hele denne guide bruger langt under en cent af den. Bagefter fylder du saldoen op med krypto.

Kan jeg installere pakker med pip i sandkassen?

Ja. Sandkasser har udgående internet, og pip installerer systembredt uden virtualenv. Tunge pakker som torch kræver mere disk og hukommelse, så vælg plus eller større.

Hvorfor stopper min kommando efter 30 sekunder?

Standardtimeouten for run og exec er 30 sekunder, og maksimum for et synkront kald er 55. Alt, der tager længere tid, skal køre med background=True, som ikke har den grænse.

Bliver sandkassen slettet, hvis mit script crasher?

Med with-blokken ja: sandkassen slettes, når blokken slutter, også efter en exception. Uden den slettes en midlertidig sandkasse efter 5 minutters inaktivitet, og de minutter betaler du for.

Kommentarer

Ingen kommentarer endnu. Vær den første.

Skriv en kommentar

Kommentarer modereres, før de vises.