
本文旨在解决Streamlit应用在Windows命令行运行中遇到的WinError 10013权限错误。该错误通常指向端口访问受阻,可能是端口被占用或权限不足。核心解决方案是通过创建.streamlit/config.toml文件,明确指定一个可用的服务端口,从而避免默认端口的冲突,确保Streamlit应用能够顺利启动和运行。
当您尝试在windows环境下通过命令行运行streamlit应用时,有时可能会遇到一个恼人的permissionerror: [winerror 10013] an attempt was made to access a socket in a way forbidden by its access permissions错误。这个错误表明streamlit尝试监听某个网络端口以提供服务,但由于权限不足或该端口已被其他程序占用,导致其无法成功绑定。这通常发生在streamlit尝试使用其默认端口(通常是8501)时,或者当您尝试使用一些受限端口(如80)而没有足够权限时。
例如,考虑以下Streamlit应用代码 main.py:
import streamlit as stimport pandas as pdst.write("""# 我的第一个应用Hello *world!* """)# 假设 data/customer_booking.csv 存在且可读# df = pd.read_csv("datacustomer_booking.csv", encoding="ISO-8859-1")# st.line_chart(df["purchase_lead"])
当您在命令行中执行 streamlit run main.py 时,如果遇到上述 WinError 10013 错误,那么很可能是端口访问权限问题。
解决方案:修改Streamlit服务端口
解决WinError 10013最直接有效的方法是更改Streamlit服务监听的端口。Streamlit允许您通过配置文件来指定端口。
配置Streamlit端口
您可以通过在项目根目录或用户主目录下的.streamlit文件夹中创建一个config.toml文件来配置Streamlit的各种高级设置,包括服务端口。
步骤 1:创建 .streamlit 目录
在您的Streamlit项目根目录(即main.py文件所在的目录)下,创建一个名为.streamlit的文件夹。如果该文件夹已经存在,则跳过此步骤。
步骤 2:创建 config.toml 文件
在刚刚创建的.streamlit文件夹内,创建一个名为config.toml的文件。
步骤 3:添加端口配置
打开config.toml文件,并添加以下内容:
[server]port = 80
在这个示例中,我们将Streamlit的服务端口设置为80。您可以根据实际情况选择其他未被占用的端口,例如8080、5000、8501(Streamlit默认端口,如果它没有被占用)或者任何大于1024的端口(这些端口通常不需要管理员权限)。选择80端口可能需要管理员权限,但如果您的目标是部署到Web服务器的默认HTTP端口,这会很有用。对于本地开发,8080或5000是更常见的选择。
为什么选择不同的端口?
端口占用: 默认端口8501可能已被其他Streamlit实例或程序占用。权限限制: 某些低位端口(如80、443)在Windows上可能需要管理员权限才能绑定。选择一个高位端口(如8080、5000)可以避免权限问题。
运行与验证
完成config.toml配置后,回到命令行,再次运行您的Streamlit应用:
streamlit run main.py
Streamlit现在将尝试在您指定的端口上启动服务。如果端口可用且没有权限问题,应用将成功启动,并在命令行中显示访问URL(例如 http://localhost:80 或 http://localhost:8080)。
进一步排查与建议
如果更改端口后问题依然存在,或者您想更深入地了解和解决端口问题,可以考虑以下几点:
命令行临时修改端口:您也可以在运行命令时临时指定端口,这对于测试不同端口是否可用非常方便,而无需修改config.toml文件:
streamlit run main.py --server.port 8080
如果此命令成功,说明8080端口可用,您可以将其写入config.toml。
检查端口占用情况:使用netstat命令可以查看当前系统上所有监听的端口及其对应的进程ID(PID)。打开命令提示符(以管理员身份运行可能提供更全面的信息)并输入:
netstat -ano | findstr :
例如,检查8501端口:
netstat -ano | findstr :8501
如果输出显示该端口正在监听(LISTENING),则说明它已被占用。您可以根据PID在任务管理器中找到并终止占用该端口的进程,或者选择一个未被占用的端口。
检查防火墙设置:Windows防火墙或其他第三方安全软件可能会阻止Streamlit监听特定端口。请检查您的防火墙规则,确保Streamlit或Python进程被允许进行网络通信,或者为Streamlit使用的端口添加例外规则。
以管理员权限运行:作为最后的手段,如果确定是权限问题而非端口占用,您可以尝试以管理员身份运行命令提示符或PowerShell,然后执行streamlit run main.py。但这通常不是推荐的长期解决方案,因为以管理员权限运行所有应用会增加安全风险。
总结
WinError 10013是Windows环境下Streamlit常见的端口访问权限错误。通过在.streamlit/config.toml文件中明确配置一个可用的服务端口,可以有效地解决这一问题。在选择端口时,建议优先选择高位端口(大于1024),以避免权限冲突。如果问题持续存在,应进一步检查端口占用情况、防火墙设置,并考虑以管理员权限运行作为临时解决方案。理解并正确配置Streamlit的端口设置,是确保应用稳定运行的关键一步。
以上就是Streamlit WinError 10013 解决方案:深入理解与端口配置的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1376597.html
微信扫一扫
支付宝扫一扫