Существует ли общий способ запуска веб-приложений в Google Colab? - PullRequest
3 голосов
/ 14 января 2020

Я бы хотел разрабатывать веб-приложения в Google colab. Единственная проблема заключается в том, что вам нужен браузер, подключенный к локальному хосту, для просмотра веб-приложения, но у Google colab нет браузера внутри ноутбука.

Но, похоже, есть способы обойти это. Например, run_with_ngrok - это библиотека для запуска приложений flaks в блокнотах colab / jupyter

https://github.com/gstaff/flask-ngrok#inside -jupyter - colab-notebooks

Когда вы ее используете, она дает случайный адрес: «Работает на http://.ngrok.io»

И каким-то образом веб-приложение, работающее в Google colab, работает по этому адресу.

Это отличное решение для Flask приложений, но в целом я хочу запускать веб-приложения в Google Colab, а не только Flask. Существует ли общий метод запуска веб-приложений в ноутбуках colab / jupyter?

Ответы [ 3 ]

3 голосов
/ 29 апреля 2020

Вы можете запланировать запуск сервера на порту, например, порт = 8000. Найдите URL-адрес для использования таким образом.

from google.colab.output import eval_js
print(eval_js("google.colab.kernel.proxyPort(8000)"))
# https://z4spb7cvssd-496ff2e9c6d22116-8000-colab.googleusercontent.com/

Затем запустите сервер, например,

!python -m http.server 8000

и нажмите первую ссылку выше (вместо localhost или 127.0.0.1)

Отображение в ячейке

Вы можете отобразить результат в iframe в выходной части. Я превратил это в простую функцию для вызова.

from IPython.display import Javascript

def show_port(port, height=400):
  display(Javascript("""
  (async ()=>{
    fm = document.createElement('iframe')
    fm.src = await google.colab.kernel.proxyPort(%s)
    fm.width = '95%%'
    fm.height = '%d'
    fm.frameBorder = 0
    document.body.append(fm)
  })();
  """ % (port, height) ))

Теперь вы можете запустить веб-приложение (здесь это http.server) в фоновом режиме. И отобразите результат в виде iframe под ним.

get_ipython().system_raw('python3 -m http.server 8888 &') 
show_port(8888)

Чтобы остановить сервер, вы можете вызвать ps и завершить процесс.

2 голосов
/ 17 января 2020

Ответ находится здесь

Запустите приложение Da sh в блокноте Google Colab

### Install ngrok
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip

### Run ngrok to tunnel Dash app port 8050 to the outside world. 
### This command runs in the background.
get_ipython().system_raw('./ngrok http 8050 &')

### Get the public URL where you can access the Dash app. Copy this URL.
! curl -s http://localhost:4040/api/tunnels | python3 -c \
    "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"

Затем запустите веб-приложение на порт 8050

1 голос
/ 15 января 2020

Вот пример, который иллюстрирует запуск веб-сервера и обслуживание ресурсов для выходного кадра Colab.

https://colab.research.google.com/notebooks/snippets/advanced_outputs.ipynb#scrollTo = R8ZvCXC5A0wT

Colab кэширует обслуживаемые выходные данные так, чтобы тетради будут рендерить без повторного исполнения. Для живых серверов пользователям потребуется повторно выполнить код, чтобы запустить сервер. Но впоследствии Colab будет прокси-запросы от выходного фрейма, которые ссылаются на localhost на серверную часть Colab.

...