PyInstaller编译Python脚本后docx2pdf转换功能报错求助
解决PyInstaller打包后docx2pdf转PDF报错的问题
问题根源
报错AttributeError: 'NoneType' object has no attribute 'write'来自tqdm进度条组件:当PyInstaller打包脚本(尤其是使用--noconsole参数打包为无窗口程序)时,系统标准输出流(sys.stdout)会被置为None,而docx2pdf默认启用的tqdm进度条尝试向该流写入内容,导致触发错误。
解决方案
1. 禁用docx2pdf的进度条
直接在调用convert函数时传入show_progress=False参数,跳过tqdm的初始化,从根源避免流写入问题:
from docx2pdf import convert # 禁用进度条后打包即可正常运行 convert("your_file.docx", show_progress=False)
2. 打包时保留控制台窗口
如果需要查看转换过程的输出信息,打包时不要使用--noconsole参数,确保标准输出流正常可用:
# 正确打包命令(保留控制台) pyinstaller your_script.py
若使用.spec配置文件,需将console参数设置为True:
# 示例.spec文件内容 a = Analysis(...) pyz = PYZ(a.pure, a.zipped_data, ...) exe = EXE(pyz, a.scripts, a.binaries, ..., console=True, # 保留控制台 ...)
3. 手动指定tqdm的输出流
如果必须使用无窗口模式且需要记录进度,可将tqdm的输出重定向到日志文件:
import sys from docx2pdf import convert from tqdm import tqdm # 重定向标准输出到日志文件 sys.stdout = open("conversion_log.txt", "a", encoding="utf-8") # 设置tqdm默认输出到该文件 tqdm.set_defaults(file=sys.stdout) convert("your_file.docx")
内容的提问来源于stack exchange,提问作者nilton klebert
相关产品推荐
相关产品推荐

