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

使用auto_py_to_exe打包Python Eel应用生成可执行文件后运行报错求助

解决Eel应用PyInstaller打包后运行出现'NoneType' object has no attribute 'write'错误

错误原因

使用--windowed参数打包时,Python的sys.stdout和sys.stderr会被设置为None,而Eel依赖的Bottle库在导入阶段会尝试向标准输出写入内容,从而触发该属性错误。

解决方案

1. 修改main.py代码

在导入eel之前,先重定向标准输出和错误流到空对象,避免Bottle写入失败,同时适配PyInstaller打包后的资源路径:

import sys
import os

# 处理windowed模式下stdout/stderr为None的问题
class NullStream:
    def write(self, msg):
        pass

if sys.stdout is None:
    sys.stdout = NullStream()
if sys.stderr is None:
    sys.stderr = NullStream()

# 之后再导入eel
import eel

# 获取打包后的资源路径(适配PyInstaller临时目录)
def get_resource_path(relative_path):
    try:
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# 初始化eel时使用正确的资源路径
eel.init(get_resource_path('web'))
eel.start('main.html', size=(800, 600))

2. 调整PyInstaller打包命令

确保--add-data参数格式正确(Windows用;分隔路径),同时显式声明隐藏依赖:

pyinstaller --noconfirm --onedir --windowed --add-data "web;web" --hidden-import eel --hidden-import bottle main.py

如果用auto_py_to_exe操作,在「Additional Files」中添加web文件夹,目标路径设为web;在「Hidden Imports」中添加eel和bottle。

3. 验证打包结果

打包完成后进入dist/main目录(onedir模式),运行main.exe,即可正常启动应用窗口,不再触发原错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:15:34