Streamlit WinError 10013 解决方案:深入理解与端口配置

DDD
发布: 2025-10-09 09:41:40
原创
1062人浏览过

Streamlit WinError 10013 解决方案:深入理解与端口配置

本文旨在解决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 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 错误,那么很可能是端口访问权限问题。

解决方案:修改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文件,并添加以下内容:

Text-To-Pokemon口袋妖怪
Text-To-Pokemon口袋妖怪

输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪

Text-To-Pokemon口袋妖怪48
查看详情 Text-To-Pokemon口袋妖怪
[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)。

进一步排查与建议

如果更改端口后问题依然存在,或者您想更深入地了解和解决端口问题,可以考虑以下几点:

  1. 命令行临时修改端口: 您也可以在运行命令时临时指定端口,这对于测试不同端口是否可用非常方便,而无需修改config.toml文件:

    streamlit run main.py --server.port 8080
    登录后复制

    如果此命令成功,说明8080端口可用,您可以将其写入config.toml。

  2. 检查端口占用情况: 使用netstat命令可以查看当前系统上所有监听的端口及其对应的进程ID(PID)。 打开命令提示符(以管理员身份运行可能提供更全面的信息)并输入:

    netstat -ano | findstr :<端口号>
    登录后复制

    例如,检查8501端口:

    netstat -ano | findstr :8501
    登录后复制

    如果输出显示该端口正在监听(LISTENING),则说明它已被占用。您可以根据PID在任务管理器中找到并终止占用该端口的进程,或者选择一个未被占用的端口。

  3. 检查防火墙设置: Windows防火墙或其他第三方安全软件可能会阻止Streamlit监听特定端口。请检查您的防火墙规则,确保Streamlit或Python进程被允许进行网络通信,或者为Streamlit使用的端口添加例外规则。

  4. 以管理员权限运行: 作为最后的手段,如果确定是权限问题而非端口占用,您可以尝试以管理员身份运行命令提示符或PowerShell,然后执行streamlit run main.py。但这通常不是推荐的长期解决方案,因为以管理员权限运行所有应用会增加安全风险。

总结

WinError 10013是Windows环境下Streamlit常见的端口访问权限错误。通过在.streamlit/config.toml文件中明确配置一个可用的服务端口,可以有效地解决这一问题。在选择端口时,建议优先选择高位端口(大于1024),以避免权限冲突。如果问题持续存在,应进一步检查端口占用情况、防火墙设置,并考虑以管理员权限运行作为临时解决方案。理解并正确配置Streamlit的端口设置,是确保应用稳定运行的关键一步。

以上就是Streamlit WinError 10013 解决方案:深入理解与端口配置的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号