Views
No views yet
1from colab_tunnel import get_share_link
2link = get_share_link('srvus', 7860)
3print(link)uv pip install colab-tunnelpip install colab-tunneluv add colab-tunnel1from colab_tunnel import get_share_link
2
3# Один провайдер
4link = get_share_link('gradio', 7860)
5
6# Все провайдеры параллельно
7links = 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 | — | — | Отключён: сервис временно недоступен |
srvus, serveo, localhostrun, optimistix) используют стандартный SSH-ключ системы, при необходимости генерируется автоматически.get_share_link(host, port)1from colab_tunnel import get_share_link
2
3link = get_share_link('gradio', 7860)
4# host='all' — запустить всех параллельно, вернуть все ссылки
5links = get_share_link('all', 7860)try_all(port)1from colab_tunnel import try_all
2
3print(try_all(7860))
4# gradio: https://...gradio.live
5# bore: http://bore.pub:XXXXX/
6# srvus: https://...srv.us
7# ...benchmark(providers, timeout_per_provider, latency_timeout, print_report)test_server из папки проекта.1from colab_tunnel import benchmark
2
3results = benchmark()
4# Бенчмарк: 14 провайдеров, порт XXXXX.
5# [srvus ] OK (0.43с). Проверка... RTT 174мс
6# [bore ] OK (0.81с). Проверка... RTT 125мс
7# ...
8# Итого: 14/14 провайдеров работают.
9# Минимальная задержка: bore (125мс)
10
11# Выборочно
12results = benchmark(providers=['cloudflared', 'bore', 'gradio'])
13
14# Результаты — список TunnelBenchmarkResult
15for r in results:
16 print(r.name, r.tunnel_time, r.latency, r.url)test_server определяется автоматически:TEST_SERVER_PATH../test_server/test_server относительно пакета./test_server/test_server относительно CWD1from colab_tunnel import list_providers, disable_provider, enable_provider
2
3# Статус всех провайдеров
4list_providers()
5# {'tmole': True, 'tunwg': False, 'cloudflared': True, ...}
6
7# Отключить нерабочий
8disable_provider('tunwg')
9
10# Включить обратно
11enable_provider('tunwg')get_share_link('all', ...), try_all() и benchmark(),
но его функция (get_tunwg_url) остаётся доступна напрямую.1from colab_tunnel import download, run, WORK_FOLDER
2
3# Скачать файл с прогрессом
4path = download('https://example.com/file.tar.gz', save_path='/tmp')
5
6# Выполнить shell-команду
7result = run('echo hello', timeout=10)
8print(result['status_code'], result['output'])
9
10# Рабочая папка (по умолчанию /content/.config)
11print(WORK_FOLDER)| Переменная окружения | По умолчанию | Описание |
|---|---|---|
TUNNEL_WORK_DIR | /content/.config | Папка для бинарников и кэша |
TEST_SERVER_PATH | — | Путь к бинарнику тестового сервера |
1import os
2os.environ['TUNNEL_WORK_DIR'] = '/tmp/tunnels'
3
4from colab_tunnel import get_share_link # подхватит новый путьВажно: переменнаяTUNNEL_WORK_DIRдолжна быть установлена до первого импортаcolab_tunnel.
1from colab_tunnel import tunnel_provider, get_share_link
2
3@tunnel_provider('myprovider')
4def get_myprovider_url(port: int) -> str:
5 # Запустить бинарник/SSH и вернуть публичный URL
6 return 'https://...'
7
8# Провайдер сразу доступен
9link = get_share_link('myprovider', 7860)get_revproxy_url:1from colab_tunnel._tunnels import get_revproxy_url
2from colab_tunnel._config import WORK_FOLDER
3from colab_tunnel import tunnel_provider
4
5@tunnel_provider('myprovider')
6def get_myprovider_url(port: int) -> str:
7 return get_revproxy_url(
8 bin_url='https://example.com/mytunnel-linux-amd64',
9 need_unpack=False,
10 bin_path=WORK_FOLDER / 'mytunnel',
11 start_commands=[str(WORK_FOLDER / 'mytunnel'), str(port)],
12 read_from_stderr=False,
13 url_pattern=r'https://\S+\.mytunnel\.io',
14 timeout=20.0,
15 )1git clone --depth 1 https://github.com/imbecility/colab-tunnel
2cd colab-tunnel
3pip install -e ".[dev]"
4
5# Запустить тесты (не требуют сети)
6pytest tests/
7
8# Тесты регулярных выражений провайдеров
9pytest tests/test_regex.py -v
10
11# Тесты утилит (требуют Unix)
12pytest tests/test_utils.py -vcolab_tunnel/
├── __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 # Тесты утилитарных функций1import logging
2logging.getLogger('colab_tunnel').setLevel(logging.DEBUG)