python - 使用 Colab 和 pyngrok 进行 Streamlit - 无法完成隧道连接 - 版本问题?
问题描述
出于教育用途,我正在尝试在 Google Colab Jupyter 笔记本中运行 Streamlit 应用程序。*
你可以在这里运行我的设置。这在几周前一直有效。
现在,应用程序只有大约 5% 的时间正确加载。其他 95% 我收到这样的错误(类似于这个问题):
无法完成隧道连接
与 67567754f01f.ngrok.io 的连接已成功通过隧道连接到您的 ngrok 客户端,但客户端未能建立与本地地址 localhost:80 的连接。
确保 Web 服务正在 localhost:80 上运行并且它是有效地址。
遇到的错误是:dial tcp 127.0.0.1:80: connect: connection denied
有什么修复建议吗?
*动机:我正在使用 Colab,以便我可以共享文件并让学生完全在浏览器中查看和编辑应用程序,而无需安装。如果有更好的方法来实现这一点,欢迎挑战框架!
版本:
- 蟒蛇 3.6.9
- streamlit 0.71.0(也尝试了几个以前的版本)
- pyngrok 5.0.0(也试过 4.2.2。这是一个新的主要版本 - 相关吗?)
- 火狐 82.0.3
完整的代码和输出:
代码:
!pip -q install streamlit
!pip -q install pyngrok
输出:
Building wheel for watchdog (setup.py) … done
Building wheel for blinker (setup.py) … done
Building wheel for pathtools (setup.py) … done
ERROR: requests 2.23.0 has requirement urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1, but you’ll have urllib3 1.26.2 which is incompatible.
ERROR: google-colab 1.0.0 has requirement ipykernel~=4.10, but you’ll have ipykernel 5.3.4 which is incompatible.
ERROR: datascience 0.10.6 has requirement folium==0.2.1, but you’ll have folium 0.8.3 which is incompatible.
Building wheel for pyngrok (setup.py) … done
代码:
%%writefile app.py
import streamlit as st
st.title(“hi”)
输出:
Writing app.py
代码:
from pyngrok import ngrok
public_url = ngrok.connect(port=‘80’)
print (public_url)
!streamlit run app.py >/dev/null
输出:
NgrokTunnel: “http://67567754f01f.ngrok.io” -> “localhost:80”
/usr/local/lib/python3.6/dist-packages/requests/init.py:91: RequestsDependencyWarning: urllib3 (1.26.2) or chardet (3.0.4) doesn’t match a supported version!
RequestsDependencyWarning)
t=2020-11-19T18:42:24+0000 lvl=warn msg=“failed to open private leg” id=61fef1ba5d31 privaddr=localhost:80 err=“dial tcp 127.0.0.1:80: connect: connection refused”
t=2020-11-19T18:42:24+0000 lvl=warn msg=“failed to open private leg” id=8da0b078aaa7 privaddr=localhost:80 err=“dial tcp 127.0.0.1:80: connect: connection refused”
解决方案
我遇到了同样的问题,它显示Failed to complete tunnel connection
。和它显示的底部The error encountered was: dial tcp 127.0.0.1:80: connect: connection refused
。
正如你所说version issue?
,我想是的。因为我尝试使用 pyngrok -> 4.1.1。它工作正常。做吧!pip install pyngrok==4.1.1
。
除了您的代码中还有另一个问题,我认为在这部分
from pyngrok import ngrok
public_url = ngrok.connect(port=‘80’)
print (public_url)
!streamlit run app.py >/dev/null
你应该第一次跑!streamlit run app.py >/dev/null
,然后去
from pyngrok import ngrok
public_url = ngrok.connect(port=‘80’)
通过这样做,您首先在后台运行 streamlit 应用程序,然后您正在使用 ngrok 创建一个隧道进行暴露。来源。如果我在这里错了,请纠正我。
我是从底部的这个 youtube 视频评论中了解到的。
如果您仍然遇到问题,请重新启动笔记本并再次运行。
推荐阅读
- node.js - discord.js TypeError“无法读取未定义的属性'执行'”
- php - PDO 和 Firebird 使用 LIKE 准备的 SELECT 查询不起作用
- c# - c#winforms中所有文本框都不为空后如何启用按钮?
- docker - 使用 exec 从正在运行的 Docker 容器分配和返回 bash 变量
- amazon-web-services - 无法有条件地添加 AWS::Serverless::Api 资源的 Auth 属性
- android - 颤动中下拉菜单中的状态是否存在问题
- tensorflow2.0 - 如何将 StatisticsGen 与 RaggedTensor 一起使用?
- react-hooks - 在 useState 与 useEffect 中挂钩初始值
- github - 使用 Github 设置双重身份验证,不再让我输入密码
- javascript - 检查元素的值并采取行动