−25%

kwa Windows ya mwaka, hadi 31 Okt. Tazama mipango

EQVPS
Anza

SDK ya Python kwa sandbox kwa dakika 5: kutoka pip install eqvps hadi uendeshaji wa kwanza

Sakinisha SDK ya Python ya EQVPS, washa sandbox ya Firecracker, endesha msimbo, sakinisha kifurushi, hamisha faili na endesha kazi ndefu chinichini. Hatua sita zenye amri zote, na yote yanagharimu chini ya senti moja.

Mwongozo huu unakutoa sifuri hadi sandbox inayofanya kazi kwa Python. Utawasha microVM ya Firecracker iliyotengwa, utaendesha msimbo ndani yake, utasakinisha kifurushi, utahamisha faili ndani na nje, na utaendesha kitu kirefu chinichini. Kila hatua ni mistari michache ya kubandika.

Unahitaji Python 3.8 au mpya zaidi na akaunti ya EQVPS. SDK haina utegemezi wowote.

1. Pata tokeni

Sandbox zinalipwa kutoka salio la akaunti, kwa hiyo SDK inahitaji tokeni ya akaunti. Ukurasa wa kuunganisha akaunti unaonyesha njia tatu za kuipata: dashibodi, API au seva ya MCP. Kisha iweke kwenye mazingira:

export EQVPS_API_KEY="your-token"

Bado huna salio? Si tatizo. Mara ya kwanza akaunti mpya inapounda sandbox bila salio la kutosha, inapata $1 ya mkopo wa sandbox, halali kwa siku 14.

2. Sakinisha SDK

pip install eqvps

3. Washa sandbox na endesha msimbo

Hifadhi hii kama hello.py kisha uiendeshe:

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)

Utaona kitambulisho cha sandbox (sb_ na herufi 24 zaidi) kisha 0 3.12.x. Sandbox iliwaka kwa takriban sekunde moja, ikaendesha msimbo na ikafutwa kizuizi cha with kilipoisha.

Mambo ya kujua kuhusu matokeo:

  • r.ok ni true msimbo wa kutoka ukiwa 0 na amri haikufikia muda wake wa mwisho;
  • msimbo wa kutoka usio sifuri si exception, kwa hiyo kagua r.ok mwenyewe;
  • stdout na stderr zina kikomo cha 1 MiB kila moja, na r.truncated inakuambia kama matokeo yalikatwa.

4. Sakinisha kifurushi na endesha amri za shell

Ndani ya sandbox wewe ni root kwenye mfumo mdogo wa Linux wenye Python, Node.js, git na curl. exec inaendesha amri yoyote ya shell:

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

Muda wa mwisho wa chaguo-msingi ni sekunde 30 na wito wa kisawazishi unaweza kudumu hadi 55 tu. Usakinishaji mkubwa unafaa kuwa kazi ya chinichini (hatua ya 6).

5. Hamisha faili ndani na nje

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

Njia lazima ziwe kamili. Uhamisho mmoja una kikomo cha 5 MB; download inarudisha baiti, download_text inarudisha maandishi.

6. Endesha kazi ndefu chinichini

Weka background=True na utapata kazi badala ya kusubiri. Haina kikomo cha sekunde 55:

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() inakagua kila sekunde 2 na kuchapisha matokeo mapya yanapofika. Unaweza pia kuita task.logs() mwenyewe, au task.kill() kuisimamisha. Kazi ikiwa inaendelea, sandbox haifutwi kwa kukosa shughuli.

Gharama yake

Kila kizuizi cha with hapo juu kiliishi sekunde chache na kilitozwa kima cha chini cha sekunde 60. Kwenye small hiyo ni $0.00055 kwa kila kizuizi, kwa hiyo mifano yote mitano kwa pamoja inagharimu takriban theluthi ya senti. Bei za vifurushi vyote, hali ya kudumu na vikomo vya matumizi ziko kwenye vikomo na malipo ya sandbox.

Kitu kikienda vibaya

Hitilafu za API ni exceptions unazoweza kukamata:

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 tayari inajaribu tena majibu ya 429 na 503 hadi mara tatu seva inaposema ni muda gani wa kusubiri. Madarasa yote 11 ya hitilafu yameorodheshwa kwenye marejeo ya SDK.

Hatua zinazofuata

Maswali

Je, ninahitaji kadi ya benki ili kujaribu?

Hapana. Akaunti mpya inapata $1 ya mkopo wa sandbox mara ya kwanza inapounda sandbox bila salio la kutosha. Mwongozo huu wote unatumia chini sana ya senti moja kutoka kwake. Baada ya hapo unaongeza salio kwa crypto.

Je, ninaweza kusakinisha vifurushi kwa pip ndani ya sandbox?

Ndiyo. Sandbox zina intaneti ya kutoka nje, na pip inasakinisha kwenye mfumo bila virtualenv. Vifurushi vizito kama torch vinahitaji diski na kumbukumbu zaidi, kwa hiyo tumia kifurushi plus au kikubwa zaidi.

Kwa nini amri yangu inakatika baada ya sekunde 30?

Muda wa mwisho wa chaguo-msingi wa run na exec ni sekunde 30, na upeo wa wito wa kisawazishi ni 55. Chochote kinachochukua muda mrefu zaidi kiendeshe kwa background=True, ambayo haina kikomo hicho.

Je, sandbox inafutwa ikiwa skripti yangu itaanguka?

Kwa kizuizi cha with, ndiyo: sandbox inafutwa kizuizi kinapoisha, hata baada ya exception. Bila hicho, sandbox ya muda inafutwa baada ya dakika 5 bila shughuli, na unalipia dakika hizo.

Maoni

Bado hakuna maoni. Kuwa wa kwanza.

Acha maoni

Maoni yanakaguliwa kabla ya kuonekana.