Python程序打包exe报错

文章主要讲述了在使用Pyinstaller将Python程序打包成exe时遇到的问题及解决方案,包括检查Pyinstaller和Python版本的兼容性,避免路径中出现中文或空格,处理Anaconda环境,以及因Pandas版本差异导致的DataFrame.append方法问题。最终通过调整代码和升级Pandas版本解决了问题。

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


在py文件所处的路径下输入cmd,进入文件夹的终端进行打包
# 带有终端窗口
pyinstaller -F xxx.py

# 不带终端窗口
pyinstaller -F -w xxx.py

解决方法(一):检查你的Pyinstaller版本和Python版本或者第三方库版本是否匹配,如果不匹配,尝试卸载重新安装合适的版本

1.查看pyinstallar版本

pyinstaller --version
提示The ‘pathlib’ package is an obsolete backport of a standard library package and is incompatible with PyInstaller.
conda remove pathlib卸载pathlib,提示The following packages will be UPDATED,输入y。
继续查看pyinstaller --version,Please install pywin32-ctypes.用pip install pywin32-ctypes提示已安装,用conda install pywin32-ctypes成功安装。
pyinstaller --version
5.13.0

2 查看Python版本

python --version
Python 3.10.12

尝试

1.编辑 python 目录/Libs/dis.py,找到 def _unpack_opargs,将 else 部分增加一行
extended_arg = 0
https://zhuanlan.zhihu.com/p/438387547
发现文件里已存在这行
2.查看5.13.0 pyinstaller官方文档,发现支持3.10.12版本的python,也能在win10上运行
在这里插入图片描述
https://pypi.org/project/pyinstaller/

解决方法(二):修改你的Python安装路径或者打包文件路径,确保没有中文或者空格

C:\Users\zzfs\Desktop\test
依然无法运行

解决方法(三)重装Anaconda

没用

解决方法(四)在Anaconda Prompt里打包

没用

解决方法(五) 加日志记录问题

日志提示
File “pandas\core\generic.py”, line 5989, in getattr
AttributeError: ‘DataFrame’ object has no attribute ‘append’
pandas版本升级弃用了 老版本’DataFrame’的append方法。
#position_detail=position_detail.append(pd.Series(c3, index=position_detail.columns), ignore_index=True)
改成
position_detail=pd.concat([position_detail, pd.DataFrame([pd.Series(c3, index=position_detail.columns)])], ignore_index=True)

解决了。

可能是安装anaconda时同时安装了3.10版本的Python,但我之前单独安装过3.11版本的,spyder编译器里面内置的pandas包的版本 跟 打包时的pandas包不一样。

改成

report_df = pd.DataFrame(columns=column_names)
for row in ws.iter_rows(min_row=4, values_only=True):
#print(row)
#report_df=report_df.append(pd.Series(row), ignore_index=True)
report_df.loc[len(report_df)] = row

改成
max_columns = 0 # 记录拆分后的最大列数
new_rows = []
for i in range(0, len(column_data)):
split_data = re.split(pattern, column_data.iloc[i]) # 使用正则表达式拆分数据
if len(split_data) > max_columns:
max_columns = len(split_data)
new_rows.append(split_data)
#hkex_txt3 = hkex_txt3.append(pd.Series(split_data), ignore_index=True)
new_df = pd.DataFrame(new_rows)
hkex_txt3 = pd.concat([hkex_txt3, new_df], ignore_index=True)

### 解决Python Tkinter应用程序使用PyInstaller打包EXE文件时报错的方法 #### PyInstaller安装与配置 为了确保PyInstaller能够正常工作,在安装过程中需要注意版本兼容性和环境变量设置。通常情况下,通过`pip install pyinstaller`可以完成安装过程[^1]。 #### 打包前准备 在尝试打包之前,确认所有依赖库已经正确安装,并且测试脚本可以在解释器环境中无误运行。对于Tkinter应用而言,特别注意检查是否存在特定于平台的二进制扩展模块未被自动识别的情况[^3]。 #### 处理常见错误 当遇到缺少依赖项如`pypiwin32`或`pywin32-ctypes`这类警告时,可以通过显式指定这些额外的需求来解决问题。具体做法是在命令行参数中加入相应的路径指向系统DLL目录或者其他必要的资源位置: ```bash pyinstaller -F -w --add-binary "C:\path\to\dlls;." your_tkinter_app.py ``` 这里`your_tkinter_app.py`代表待打包的应用程序入口文件名;而`--add-binary`选项用于添加外部二进制文件到最终生成的单个可执行文件内[^2]。 另外一种情况是由于某些第三方库内部实现了隐式的网络请求功能而导致失败。如果确定自己的项目不需要互联网访问,则应深入研究相关库的行为模式并考虑替换为更合适的替代品,或者修改源码以移除不必要的联网行为。 #### 使用隐藏导入(Hidden Imports) 有时即使指定了所有的直接依赖关系,仍然会遗漏一些间接使用的子模块。这时就需要利用PyInstaller提供的`hiddenimports`特性,在`.spec`文件里声明那些未能自动检测出来的组件名称列表: ```python a = Analysis(['your_script.py'], pathex=['/path/to/project'], hiddenimports=['some_module', 'another_module'], ...) ``` 上述代码片段展示了如何向分析阶段传递额外的信息以便更好地理解整个项目的结构[^4]。 #### 调试技巧 面对复杂的多层嵌套异常信息时,建议启用详细的日志记录机制帮助定位根本原因。这可以通过调整CLI参数中的verbosity级别实现(`-v`),从而获得更加详尽的过程描述和潜在问题线索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值