0

出于教育用途,我正在尝试在 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”
4

2 回答 2

2

我遇到了同样的问题,它显示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 视频评论中了解到的。

如果您仍然遇到问题,请重新启动笔记本并再次运行。

于 2020-11-30T20:21:13.790 回答
0

按照 alexdlair 在评论中的引导,我需要指定 Streamlit 应该在端口 80 上启动服务器:

!streamlit 运行 --server.port 80 app.py >/dev/null

我也应该能够通过编辑 Streamlit 配置文件(此处为解释器)来做到这一点,但这对我不起作用。

我发现我还需要在运行 Streamlit 和打开 Web 应用程序之间等待几秒钟以避免错误。

于 2020-11-19T22:37:11.543 回答