−25%

на річну оплату Windows, до 31.10. До тарифів

EQVPS
Почати

Python SDK для пісочниць за 5 хвилин: від pip install eqvps до першого запуску

Встановіть Python SDK EQVPS, запустіть пісочницю на Firecracker, виконайте код, поставте пакет, передайте файли й запустіть довге завдання у фоні. Шість кроків, усі команди на місці, а весь шлях коштує менше цента.

Цей посібник проведе від нуля до робочої пісочниці на Python. Ви запустите ізольовану мікро-VM на Firecracker, виконаєте в ній код, поставите пакет, передасте файл туди й назад і запустите щось довге у фоні. Кожен крок — кілька рядків, які можна вставити як є.

Потрібні Python 3.8 або новіший і акаунт EQVPS. SDK не має залежностей.

1. Отримайте токен

Пісочниці оплачуються з балансу акаунта, тож SDK потрібен токен акаунта. На сторінці підключення акаунта показано три способи його отримати: кабінет, API або MCP-сервер. Потім покладіть його у змінну оточення:

export EQVPS_API_KEY="your-token"

Балансу ще немає? Не страшно. Коли новий акаунт уперше створює пісочницю без достатнього балансу, він отримує $1 кредиту на пісочниці, що діє 14 днів.

2. Встановіть SDK

pip install eqvps

3. Запустіть пісочницю й виконайте код

Збережіть це як hello.py і запустіть:

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)

Ви побачите id пісочниці (sb_ і ще 24 символи), а потім 0 3.12.x. Пісочниця запустилася приблизно за секунду, виконала код і видалилася, коли закінчився блок with.

Що корисно знати про результат:

  • r.ok дорівнює true, коли код повернення 0 і команда не вперлася в таймаут;
  • ненульовий код повернення — не виняток, тож перевіряйте r.ok самі;
  • stdout і stderr обмежені 1 MiB кожен, а r.truncated підкаже, якщо вивід обрізано.

4. Поставте пакет і виконайте команди shell

Усередині пісочниці ви root у невеликій Linux-системі з Python, Node.js, git і curl. exec виконує будь-яку команду 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

Таймаут за замовчуванням — 30 секунд, а синхронний виклик може тривати не більше 55. Великі встановлення краще запускати фоновим завданням (крок 6).

5. Передайте файли туди й назад

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

Шляхи мають бути абсолютними. Одна передача обмежена 5 MB; download повертає байти, download_text — рядок.

6. Запустіть довге завдання у фоні

Передайте background=True, і замість очікування ви отримаєте завдання. Обмеження в 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() опитує завдання кожні 2 секунди й друкує новий вивід, щойно він з'являється. Можна й самому викликати task.logs() або зупинити завдання через task.kill(). Поки завдання працює, пісочниця не видаляється за бездіяльність.

Скільки це коштувало

Кожен блок with вище жив кілька секунд, і за нього списано мінімум у 60 секунд. На small це $0.00055 за блок, тож усі п'ять прикладів разом коштують близько третини цента. Ціни всіх тарифів, постійний режим і ліміти витрат — у розділі ліміти й оплата пісочниць.

Якщо щось пішло не так

Помилки API — це винятки, які можна перехопити:

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 сам повторює відповіді 429 і 503 до трьох разів, коли сервер повідомляє, скільки чекати. Усі 11 класів помилок перелічено в довіднику SDK.

Що далі

Часті питання

Чи потрібна банківська картка, щоб спробувати?

Ні. Новий акаунт отримує $1 кредиту на пісочниці, коли вперше створює пісочницю без достатнього балансу. Увесь цей посібник витрачає з нього помітно менше цента. Далі баланс поповнюється криптовалютою.

Чи можна ставити пакети через pip усередині пісочниці?

Так. Пісочниці мають вихід в інтернет, і pip ставить пакети в систему без virtualenv. Важким пакетам на кшталт torch потрібно більше диска й пам'яті, для них беріть тариф plus або більший.

Чому команда обривається через 30 секунд?

За замовчуванням у run і exec таймаут 30 секунд, а максимум для синхронного виклику — 55. Усе, що довше, запускайте з background=True: там такого обмеження немає.

Чи видалиться пісочниця, якщо мій скрипт впаде?

З блоком with — так: пісочниця видаляється під час виходу з блоку, зокрема після винятку. Без нього тимчасова пісочниця видаляється після 5 хвилин бездіяльності, і ці хвилини оплачуються.

Коментарі

Поки немає коментарів. Будьте першим.

Залишити коментар

Коментарі проходять модерацію перед публікацією.