问题1:Could not create share link. Missing file: /work/Users/zhuzhiwei/anaconda3/envs/meshAnything/lib/python3.10/site-packages/gradio/frpc_linux_amd64_v0.3
这是说无法创建在公域网上的可分享的网址(public URL),也给了解决办法,但有两点小坑需要注意。
问题溯源
- 坑1:国内无法访问huggingface.co网址,无法下载frpc_linux_amd64_v0.3
- 坑2:即使下载完frpc_linux_amd64_v0.3后还是报错Could not create share link. Please check your internet connection or our status page: https://status.gradio.app.
解决办法:
- 从镜像网址下载frpc_linux_amd64,将
huggingface.co
替换为hf-mirror.com
,即:https://cdn-media.hf-mirror.com/frpc-gradio-0.3/frpc_linux_amd64
- 给frpc_linux_amd64可执行权限:
chmod +x frpc_linux_amd64_v0.3
问题2:http://127.0.0.1:7860无法访问
问题1解决后,就已经能成功发布网址了。下面那个public URL直接可以访问。
如果你就是在本地电脑部署的代码,那么恭喜你,http://127.0.0.1:7860也是能访问的,
但是如果你是在服务器上(假设服务器IP是xx.xx.xx.xxx)部署的代码,直接在本地电脑上访问http://127.0.0.1:7860或者http://xx.xx.xx.xx:7860都打不开。
问题溯源
这就需要搞清楚127.0.0.1这个IP的特性了,127.0.0.1 是一个回环地址,该地址指电脑本身,主要预留测试本机的TCP/IP协议是否正常。只要使用这个地址发送数据,则数据包不会出现在网络传输过程中。因此127.0.0.1这个地址无法在本机外访问。
0.0.0.0才是真正表示“本网络中的本机”。
在实际应用中,一般我们在服务端绑定端口的时候可以选择绑定到0.0.0.0,这样我的服务访问方就可以通过我的多个ip地址访问我的服务。
比如我有一台服务器,一个外网地址A,一个内网地址B,如果我绑定的端口指定了0.0.0.0,那么通过内网地址或外网地址都可以访问我的应用。但是如果我之绑定了内网地址,那么通过外网地址就不能访问。 所以如果绑定0.0.0.0,也有一定安全隐患,对于只需要内网访问的服务,可以只绑定内网地址。
参考文章:【计算机网络】localhost,127.0.0.1 和 0.0.0.0傻傻分不清?这篇文章带你认识
解决办法
代码中找到这一函数demo.launch
,将其改为demo.launch(server_name='0.0.0.0',share=True)
demo.launch 函数至少支持以下形参:
server_name: 用于指定服务器绑定的地址,可以设置为 ‘0.0.0.0’ 以允许通过多个IP地址访问本机服务。
share: 用于指定是否创建一个可在公网上分享的网址(public URL)。
除了这些,Gradio的launch函数还支持其他的参数,例如:
server_port: 用于指定服务器监听的端口号。
share: 用于指定是否通过Gradio的服务器来托管应用,使得应用可以被分享。
server: 用于指定服务器类型,比如’gradio’或’flask’。
server_command: 用于指定启动服务器的命令。
prevent_thread_lock: 用于防止线程锁,允许并发执行。
api: 用于创建一个API接口。
enable_queue: 用于启用队列系统,以便在高并发时管理请求。
queue_max_size: 用于设置队列的最大大小。
queue_timeout: 用于设置队列超时时间。
debug: 用于开启调试模式。