
当您尝试在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 st
import pandas as pd
st.write("""
# 我的第一个应用
Hello *world!*         
""")
# 假设 data/customer_booking.csv 存在且可读
# df = pd.read_csv("data\customer_booking.csv",  encoding="ISO-8859-1")
# st.line_chart(df["purchase_lead"])当您在命令行中执行 streamlit run main.py 时,如果遇到上述 WinError 10013 错误,那么很可能是端口访问权限问题。
解决WinError 10013最直接有效的方法是更改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是更常见的选择。
为什么选择不同的端口?
完成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 解决方案:深入理解与端口配置的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号