使用PyInstaller将Python脚本转为.exe后无输出问题求助
问题描述
将Python脚本通过PyInstaller转换为.exe文件后,程序无任何输出,但原脚本在Spyder和CMD中运行完全正常,可正常查询PostgreSQL数据库并打印邮箱列表。PyInstaller打包过程无报错,尝试过添加多个hidden-import、切换单文件/多文件模式,甚至使用auto-py-to-exe工具,问题仍未解决。
原Python代码:
import psycopg2 try: # 连接PostgreSQL conn = psycopg2.connect( dbname="xxxx", user="xxxx", password="xxxx", host="postgresql-xxxx-xxxx.xxxx.xxxx", port="xxxx" # PostgreSQL默认端口 ) # 创建游标执行SQL命令 cursor = conn.cursor() # 执行查询 cursor.execute("SELECT email FROM membre") # 获取结果 rows = cursor.fetchall() # 打印结果 for row in rows: print(row) except Exception as e: print(f"发生错误:{e}") finally: # 关闭游标和连接 if cursor: cursor.close() if conn: conn.close()
使用的打包命令:
pyinstaller --onefile --hidden-import=psycopg2 --hidden-import=psycopg2._psycopg --hidden-import=psycopg2.extensions --hidden-import=psycopg2.extras --hidden-import=sqlalchemy.dialects.postgresql --hidden-import=sqlalchemy.dialects.postgresql.psycopg2 creation_userform_sans_sql.py
解决方案
- 在CMD中手动运行.exe:双击.exe会导致窗口一闪而过,无法查看报错信息。打开CMD,导航到.exe所在目录,手动执行文件,直接查看终端输出的错误详情。
- 补充psycopg2依赖的动态库:psycopg2依赖PostgreSQL的
libpq.dll,PyInstaller可能未自动包含该文件。从PostgreSQL安装目录的bin文件夹中找到libpq.dll,复制到.exe同目录;或打包时用--add-binary参数指定路径:pyinstaller --onefile --add-binary "C:\Program Files\PostgreSQL\15\bin\libpq.dll;." --hidden-import=psycopg2._psycopg creation_userform_sans_sql.py - 精简
hidden-import项:原脚本未使用sqlalchemy,删除相关hidden-import参数,仅保留--hidden-import=psycopg2._psycopg即可,这是psycopg2的核心依赖项。 - 切换为多文件模式打包:单文件模式易出现动态库加载异常,用
--onedir替换--onefile,生成包含所有依赖的文件夹,运行其中的.exe文件。 - 强制显示控制台窗口:若打包时误加
--windowed或--noconsole参数,会隐藏控制台导致看不到输出。确保命令中无此类参数,或显式添加--console强制弹出控制台。 - 添加日志记录错误:修改脚本,将错误信息写入日志文件,即使控制台无输出也能排查问题:
import psycopg2 import traceback try: # 原连接与查询代码 conn = psycopg2.connect(...) # 后续逻辑不变 except Exception as e: with open("error_log.txt", "w", encoding="utf-8") as f: f.write(f"错误信息:{str(e)}\n") f.write(traceback.format_exc()) finally: # 原关闭游标与连接代码
内容的提问来源于stack exchange,提问作者seblenor
相关产品推荐
相关产品推荐

