−25%

på Windows vid årsbetalning, till 31/10. Till paketen

EQVPS
Kom igång

Python-SDK för sandlådor på 5 minuter: från pip install eqvps till första körningen

Installera EQVPS Python-SDK, starta en Firecracker-sandlåda, kör kod, installera ett paket, flytta filer och kör ett långt jobb i bakgrunden. Sex steg med alla kommandon, och alltihop kostar under en cent.

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.ok själv;
  • stdout och stderr är begränsade till 1 MiB vardera, och r.truncated talar 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

FAQ

Behöver jag ett kort för att prova?

Nej. Ett nytt konto får 1 $ sandlådekredit första gången det skapar en sandlåda utan tillräckligt saldo. Hela den här guiden använder långt mindre än en cent av den. Därefter fyller du på saldot med krypto.

Kan jag installera paket med pip i sandlådan?

Ja. Sandlådorna har utgående internet, och pip installerar systemomfattande utan virtualenv. Tunga paket som torch behöver mer disk och minne, så välj plus eller större.

Varför avbryts mitt kommando efter 30 sekunder?

Standardtidsgränsen för run och exec är 30 sekunder, och maxgränsen för ett synkront anrop är 55. Allt som tar längre tid ska köras med background=True, som saknar den gränsen.

Raderas sandlådan om mitt skript kraschar?

Med with-blocket ja: sandlådan raderas när blocket avslutas, även efter ett undantag. Utan det raderas en tillfällig sandlåda efter 5 minuters inaktivitet, och de minuterna betalar du för.

Kommentarer

Inga kommentarer än. Bli först.

Lämna en kommentar

Kommentarer modereras innan de visas.