Skip to main content

Утилиты для туннелирования веб-интерфейсов в Google Colab

Project description

colab-share

Библиотека для публичного туннелирования локальных портов в Google Colab. Поддерживает в настоящий момент 15 провайдеров, работает молча — выдаёт ссылку без лишних действий со стороны пользователя.

from colab_share import get_share_link
link = get_share_link('srvus', 7860)
print(link)

Установка

uv pip install colab-share
pip install colab-share
uv add colab-share

Быстрый старт

from colab_share import get_share_link

# Один провайдер
link = get_share_link('gradio', 7860)

# Все провайдеры параллельно
links = get_share_link('all', 7860)

Провайдеры

Имя Старт RTT Примечания
srvus ~0.4с ~200мс Один из быстрейших
bore ~0.5с ~150мс Минимальная задержка
localt ~0.3с ~300мс
localhostrun ~0.7с ~200мс
gradio ~0.5с ~200мс
tmole ~1.5с ~350мс
beeceptor ~2с ~400мс
optimistix ~1.5с ~500мс
mmar ~1с ~600мс
serveo ~1.5с ~700мс
boredigital ~1.5с ~900мс
cloudflared ~4с ~400мс Warmup ~15с после старта
tunnelite ~4с ~300мс
native ~2с Только в Colab, требует Google-авторизации
tunwg Отключён: сервис временно недоступен

SSH-провайдеры (srvus, serveo, localhostrun, optimistix) используют стандартный SSH-ключ системы, при необходимости генерируется автоматически.


API

get_share_link(host, port)

Получить публичную ссылку через указанный провайдер.

from colab_share import get_share_link

link = get_share_link('gradio', 7860)
# host='all' — запустить всех параллельно, вернуть все ссылки
links = get_share_link('all', 7860)

try_all(port)

Параллельно запускает всех активных провайдеров, возвращает все полученные ссылки.

from colab_share import try_all

print(try_all(7860))
# gradio: https://...gradio.live
# bore: http://bore.pub:XXXXX/
# srvus: https://...srv.us
# ...

benchmark(providers, timeout_per_provider, latency_timeout, print_report)

Последовательно тестирует провайдеров с замером времени старта и RTT. Требует бинарник test_server из папки проекта.

from colab_share import benchmark

results = benchmark()
# Бенчмарк: 14 провайдеров, порт XXXXX.
# [srvus       ] OK (0.43с). Проверка... RTT 174мс
# [bore        ] OK (0.81с). Проверка... RTT 125мс
# ...
# Итого: 14/14 провайдеров работают.
# Минимальная задержка: bore (125мс)

# Выборочно
results = benchmark(providers=['cloudflared', 'bore', 'gradio'])

# Результаты — список TunnelBenchmarkResult
for r in results:
    print(r.name, r.tunnel_time, r.latency, r.url)

Путь к test_server определяется автоматически:

  1. Переменная окружения TEST_SERVER_PATH
  2. ../test_server/test_server относительно пакета
  3. ./test_server/test_server относительно CWD

Управление провайдерами

from colab_share import list_providers, disable_provider, enable_provider

# Статус всех провайдеров
list_providers()
# {'tmole': True, 'tunwg': False, 'cloudflared': True, ...}

# Отключить нерабочий
disable_provider('tunwg')

# Включить обратно
enable_provider('tunwg')

Отключённый провайдер не попадает в get_share_link('all', ...), try_all() и benchmark(), но его функция (get_tunwg_url) остаётся доступна напрямую.


Утилиты

from colab_share import download, run, WORK_FOLDER

# Скачать файл с прогрессом
path = download('https://example.com/file.tar.gz', save_path='/tmp')

# Выполнить shell-команду
result = run('echo hello', timeout=10)
print(result['status_code'], result['output'])

# Рабочая папка (по умолчанию /content/.config)
print(WORK_FOLDER)

Конфигурация

Переменная окружения По умолчанию Описание
TUNNEL_WORK_DIR /content/.config Папка для бинарников и кэша
TEST_SERVER_PATH Путь к бинарнику тестового сервера
import os
os.environ['TUNNEL_WORK_DIR'] = '/tmp/tunnels'

from colab_share import get_share_link  # подхватит новый путь

Важно: переменная TUNNEL_WORK_DIR должна быть установлена до первого импорта colab_share.


Добавление своего провайдера

from colab_share import tunnel_provider, get_share_link

@tunnel_provider('myprovider')
def get_myprovider_url(port: int) -> str:
    # Запустить бинарник/SSH и вернуть публичный URL
    return 'https://...'

# Провайдер сразу доступен
link = get_share_link('myprovider', 7860)

Для провайдеров на основе бинарных утилит удобно использовать get_revproxy_url:

from colab_share._tunnels import get_revproxy_url
from colab_share._config import WORK_FOLDER
from colab_share import tunnel_provider

@tunnel_provider('myprovider')
def get_myprovider_url(port: int) -> str:
    return get_revproxy_url(
        bin_url='https://example.com/mytunnel-linux-amd64',
        need_unpack=False,
        bin_path=WORK_FOLDER / 'mytunnel',
        start_commands=[str(WORK_FOLDER / 'mytunnel'), str(port)],
        read_from_stderr=False,
        url_pattern=r'https://\S+\.mytunnel\.io',
        timeout=20.0,
    )

Разработка

git clone --depth 1 https://github.com/imbecility/colab-share
cd colab-share
pip install -e ".[dev]"

# Запустить тесты (не требуют сети)
pytest tests/

# Тесты регулярных выражений провайдеров
pytest tests/test_regex.py -v

# Тесты утилит (требуют Unix)
pytest tests/test_utils.py -v

Структура проекта

colab_share/
├── __init__.py       # Публичный API
├── _config.py        # Пути и HTTP-заголовки
├── _logger.py        # Логгер (по умолчанию WARNING)
├── _registry.py      # Реестр провайдеров (@tunnel_provider)
├── _utils.py         # Утилиты: процессы, сеть, архивы
├── _tunnels.py       # Провайдеры на основе бинарников
├── _ssh.py           # SSH-провайдеры
└── _diagnostics.py   # Бенчмарк

tests/
├── test_regex.py     # Валидация regex-паттернов провайдеров
└── test_utils.py     # Тесты утилитарных функций

Детальный лог

import logging
logging.getLogger('colab_share').setLevel(logging.DEBUG)

Лицензия

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

colab_share-1.1.0.tar.gz (27.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

colab_share-1.1.0-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file colab_share-1.1.0.tar.gz.

File metadata

  • Download URL: colab_share-1.1.0.tar.gz
  • Upload date:
  • Size: 27.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for colab_share-1.1.0.tar.gz
Algorithm Hash digest
SHA256 20245268a57e89bc33e1f9e1e507cff894d7a8dd0cffcc9ae026e5b5d7e4fe44
MD5 5945fa91d481e52aa466a1e98350d79e
BLAKE2b-256 5854eda7cd685b1505d9209c8aab696c73edd13740dc6cb9878d01fc818c36be

See more details on using hashes here.

File details

Details for the file colab_share-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: colab_share-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 28.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for colab_share-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b28f7baed9c9f0ca73c6ccba01694bff83a43825bc9992b62c0e313984920035
MD5 875a2a5fa3f8ddc7a1c5a0d13186117c
BLAKE2b-256 175cb7758689bc0a2401858a0adba52aa8750f6bd9d2f4fed1b531d3cb3da101

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page