Skip to main content

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

Metadata

Release files for colab-share 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for colab-share 1.1.0
File Size Uploaded Provenance Actions
colab_share-1.1.0.tar.gz 27.6 kB Without provenance Details for colab_share-1.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for colab-share 1.1.0
File Interpreter ABI Platform Actions
colab_share-1.1.0-py3-none-any.whl Python 3 none any Details for colab_share-1.1.0-py3-none-any.whl

Total release size: 55.8 kB

Release files / colab_share-1.1.0.tar.gz

Download URL colab_share-1.1.0.tar.gz
Size 27.6 kB
Tags Source
SHA-256 checksum
How to use checksums
20245268a57e89bc33e1f9e1e507cff894d7a8dd0cffcc9ae026e5b5d7e4fe44
BLAKE2b-256 checksum
How to use checksums
5854eda7cd685b1505d9209c8aab696c73edd13740dc6cb9878d01fc818c36be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / colab_share-1.1.0-py3-none-any.whl

Download URL colab_share-1.1.0-py3-none-any.whl
Size 28.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b28f7baed9c9f0ca73c6ccba01694bff83a43825bc9992b62c0e313984920035
BLAKE2b-256 checksum
How to use checksums
175cb7758689bc0a2401858a0adba52aa8750f6bd9d2f4fed1b531d3cb3da101
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Security for colab-share 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page