You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Streamlit应用时出现PermissionError: [Errno 13]的解决方法

解决Streamlit+Camelot提取PDF表格时的PermissionError问题

问题原因

在Windows系统中,NamedTemporaryFile默认以独占读写模式创建文件。当你在with块内调用extract_table时,临时文件还被当前Streamlit进程占用,Camelot尝试读取这个被锁定的文件就会触发权限拒绝错误。

解决方案

方案1:关闭临时文件后再读取(推荐)

修改代码,先将上传的文件写入临时文件并关闭,再让Camelot读取,用完后手动删除临时文件:

import os
from tempfile import NamedTemporaryFile

# ... 其他代码 ...

if submitted:
    # 创建临时文件,设置delete=False避免自动删除
    with NamedTemporaryFile(dir='.', suffix='.pdf', delete=False) as f:
        f.write(st.session_state['uploaded_file'].getbuffer())
    # 此时文件已关闭,Camelot可正常读取
    df = extract_table(f.name, page_number, ['107', '420.1', '286', '262.1'])
    # 手动清理临时文件
    os.unlink(f.name)

方案2:使用系统默认临时目录

如果当前工作目录(C:\ect_streamlit)本身存在权限限制,可以改用系统默认的临时目录(通常权限配置更合理),无需指定dir参数:

import os
from tempfile import NamedTemporaryFile

# ... 其他代码 ...

if submitted:
    with NamedTemporaryFile(suffix='.pdf', delete=False) as f:
        f.write(st.session_state['uploaded_file'].getbuffer())
    df = extract_table(f.name, page_number, ['107', '420.1', '286', '262.1'])
    os.unlink(f.name)

额外排查点

  • 若仍报错,检查C:\ect_streamlit目录是否需要管理员权限才能写入,尝试以管理员身份启动VSCode后再运行Streamlit。
  • 确认Camelot依赖的ghostscript已正确安装并配置到系统环境变量中(部分情况下权限问题也可能是依赖工具的路径权限导致)。

内容的提问来源于stack exchange,提问作者jevic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:28:20