
在使用 Streamlit 运行应用时,可能会遇到 WinError 10013: PermissionError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions 错误。 这通常表示 Streamlit 尝试使用的默认端口已被其他程序占用,或者当前用户没有足够的权限在该端口上启动服务。
解决方法:修改 Streamlit 配置文件
解决此问题的有效方法是修改 Streamlit 的配置文件,指定一个新的可用端口。以下步骤详细说明了如何操作:
-
创建或编辑 .streamlit/config.toml 文件
如果你的项目中还没有 .streamlit/config.toml 文件,需要在项目的根目录下创建它。如果已经存在,则直接编辑该文件。该文件用于配置 Streamlit 的各项设置。
-
添加端口配置
在 .streamlit/config.toml 文件中,添加以下内容:
[server] port = 80
这里的 port = 80 指定 Streamlit 使用 80 端口。你可以根据实际情况选择一个未被占用的端口。常见的可用端口包括 80, 8000, 8080, 8501 等。 请注意,如果选择 80 端口,可能需要管理员权限。
-
重启 Streamlit 应用
保存 .streamlit/config.toml 文件后,重新运行 Streamlit 应用:
streamlit run main.py
如果配置正确,Streamlit 应用应该能够成功启动,并使用你指定的端口。
示例
假设你的 Streamlit 应用代码如下(main.py):
import streamlit as st
import pandas as pd
st.write("""
# My First App
Hello *world!*
""")
df = pd.read_csv("data\customer_booking.csv", encoding="ISO-8859-1")
st.line_chart(df["purchase_lead"])并且你已经按照上述步骤修改了 .streamlit/config.toml 文件,指定了新的端口。那么,重新运行 streamlit run main.py 之后,你应该能够通过浏览器访问 http://localhost:80 (假设你设置的端口是 80)来查看你的 Streamlit 应用。
注意事项
- 端口选择: 选择一个未被其他程序占用的端口非常重要。你可以使用命令行工具(如 netstat 在 Windows 上,或 lsof 在 Linux/macOS 上)来检查端口占用情况。
- 权限问题: 某些端口(如 80)可能需要管理员权限才能使用。如果遇到权限问题,可以尝试使用更高的端口号(如 8000 以上)。
- 防火墙: 确保你的防火墙允许 Streamlit 应用通过你指定的端口进行通信。
- config.toml 位置: .streamlit/config.toml 文件必须位于你运行 streamlit run 命令的目录下,或者 Streamlit 能够找到的配置目录中。
总结
通过修改 Streamlit 的配置文件,指定一个新的可用端口,可以有效地解决 WinError 10013 端口权限错误。 记住选择一个未被占用的端口,并确保你的防火墙和权限设置允许 Streamlit 应用正常运行。 希望本教程能帮助你顺利启动 Streamlit 应用。










