python 打包成exe中的各种坑

本文讲述了在将Python GUI程序打包成exe过程中遇到的各种问题,包括选择PyQt作为GUI库,使用sqlite作为数据库,以及在打包过程中遇到的依赖缺失问题。通过尝试不同打包工具如py2exe、pyinstall、cx-freeze,最终通过手动添加matplotlib、numpy、scipy、sklearn等库的文件以及PyQt的sql驱动解决了问题。尽管生成的exe文件大小近300MB,但成功实现了程序在Windows系统的运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说下感慨吧,对于程序员来讲,Google和stackoverflow真是不可缺少的东西,我感觉没这俩我写不了程序。


尽管现在贬win系是主流,但是在学校做项目还是离不开Windows,最终大家的成果基本都要成为一个在win系统下可执行的程序,不然没法展示给别人看,毕竟跑window的电脑才是大多数。写GUI软件用python并不是好主意,但是用C++的话太繁琐,耗时太长,C#我也没学过,现学时间也不允许,只能上python了。
1.python的做GUI的包也挺多,不过PyQt名头最大,就选它了,主要是考虑到C++版本的Qt资料比较多,可以相应参考下。
2.由于我的数据量不大,数据库方面就不选高大上的,sqlite就能满足,其实还考虑用excel或txt存储,不过想想这也太low了,而且也不方便找工作,跟面试说数据存储用excel估计直接就让你走人了。
3.综合下用到的主要如下

from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtSql import *
from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt
import sys
import xlrd
import sqlite3

项目完成后就要打包发布了,python打包成exe主要有py2exe、pyinstall、cx-freeze.用过后发现大同小异,实际走下来真是一步N坑,总提示各种缺,
具体哪一步缺啥我也忘了,总之你要按他说的缺啥补啥的话就是个无底洞。我那是一顿搜啊,眼都快瞅瞎了,期间还考虑可能是打包程序不是最新的,想升级却发现又进了另一个坑,反正就是升级不行,在另一台没装cxfreeze的电脑上想装还装不上,最后还是回到原坑,经过各种尝试,基本断定问题就出在那几个包上,最终我也没找到完美的解决方案,我的方法是在最后打包完成后,把Python里的site-package文件夹下的matplotlib,numpy,scipy,sklearn放到生成好的文件夹里,然后程序终于跑起来了,这时还有个坑,pyqt的sql驱动他还没进去,再把site-packages-pyqt4-plugins下的sqldrivers文件夹也拷过去,终于大功告成了。
这样最终生成的有接近300M,没办法,忍了吧。

<think>好的,用户的问题是关于如何在使用PyInstaller或其他工具将Python脚本打包exe后,保持命令行窗口打开以显示print输出。我需要先回忆相关知识,然后结合提供的引用内容来回答。 首先,PyInstaller打包后的exe默认在双击运行时确实会关闭命令行窗口,导致用户看到打印的信息。用户希望保留窗口,所以需要找到相应的参数配置。 根据引用中的信息,用户提到了一些命令行参数,比如-F、-w、-i等。比如引用3中的命令用了-w参数:Pyinstaller -F -w -i chengzi.ico py_word.py。这里可能需要确认-w参数的作用。根据PyInstaller文档,-w参数表示显示命令行窗口,也就是使用窗口模式。这样反而会导致没有控制台,所以如果用户希望保留窗口,应该使用-w参数。也就是说,如果用户之前用了-w,去掉这个参数可能会解决问题。 另外,引用4中的命令是pyinstaller -F C:\Users\wyc\Desktop\Auto\pyResource1.py,这里没有使用-w,所以生exe应该会打开控制台窗口。因此,用户需要确保在打包时没有使用-w选项。 还有一种情况是,即使没有使用-w,可能某些情况下窗口会一闪而过,比如程序执行太快。这时候可以在脚本末尾添加input()函数,等待用户输入,这样窗口会保持打开,直到用户按下回车。或者使用os.system("pause")等方法,但这可能依赖于系统。 另外,用户可能需要在代码中添加异常捕获,确保程序会因错误而提前退出。例如,使用try-except块包裹主程序,并在except中暂停。 总结解决方案:首先检查PyInstaller打包时是否使用了-w选项,如果有,去掉它。如果没有使用-w,生exe默认会保留控制台。如果程序执行完毕太快,可以在代码末尾添加input()来暂停。此外,确保代码中没有导致提前退出的错误。 然后根据这些思考,整理步骤,并引用提供的参考资料中的相关命令,比如引用3中的命令带有-w,需要提醒用户要使用该参数。同时可能建议用户检查他们的打包命令是否正确,例如使用正确的参数,如去掉-w,确保生的是控制台应用。</think>要让打包后的exe文件运行时保留命令行窗口并显示`print`输出,可通过以下方法实现: --- ### **1. 移除PyInstaller的窗口模式参数** PyInstaller默认生控制台程序,但若打包时添加了`-w`参数(窗口模式),则会隐藏控制台。**移除`-w`参数即可恢复控制台显示**。 例如,原命令若为: ```bash pyinstaller -F -w your_script.py ``` 需改为: ```bash pyinstaller -F your_script.py ``` 这确保生exe文件运行时会保留CMD窗口[^3]。 --- ### **2. 在代码末尾添加输入等待** 若程序执行完毕后立即关闭窗口,可在代码末尾添加`input()`或`os.system("pause")`,强制暂停程序直到用户操作。例如: ```python print("程序运行完毕") input("按回车键退出...") # 保持窗口打开 ``` 或: ```python import os os.system("pause") # 显示“请按任意键继续...”并暂停 ``` --- ### **3. 捕获异常防止意外退出** 若程序因错误提前终止,可使用`try-except`捕获异常并在退出前暂停: ```python try: # 主程序代码 print("运行中...") except Exception as e: print(f"发生错误:{e}") input("按回车键退出...") ``` --- ### **完整打包示例** 假设脚本为`main.py`,打包命令应为: ```bash pyinstaller -F main.py ``` 生的`main.exe`将保留CMD窗口并显示输出[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值