You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python Pandas打包冻结失败求助:升级至3.6后PyInstaller打包报错

解决PyInstaller打包Python3.6含Pandas脚本时的"Failed to execute script"错误

嘿,我碰到过好几个类似的情况——从Python2.7升级到3.6后,用PyInstaller打包带Pandas的GUI脚本,本地跑完全正常,但打包成exe就报错。这大概率是PyInstaller自动检测依赖时漏掉了Pandas的一些核心子模块,或者环境里残留了旧版本的缓存干扰。试试下面这几个按优先级排序的解决方案:

1. 先把PyInstaller更到适配Python3.6的版本

Python3.6对应有个经过验证的稳定PyInstaller版本,老版本对新Python的库支持容易出问题:

pip install --upgrade pyinstaller==3.6

(注:PyInstaller 3.6是专门适配Python3.6的稳定版,更高版本可能也兼容,但这个版本对Pandas的打包支持已经被很多用户验证过了)

2. 手动告诉PyInstaller要包含Pandas的隐藏子模块

有时候PyInstaller的自动依赖扫描会漏掉Pandas底层的一些子模块,你可以直接在打包命令里加隐藏导入:

pyinstaller --hidden-import pandas._libs.tslibs.timedeltas --hidden-import pandas._libs.tslibs.np_datetime --hidden-import pandas._libs.tslibs.nattype --hidden-import pandas._libs.skiplist 你的脚本名.py

嫌命令太长的话,也可以创建一个hook-pandas.py文件,放在你的脚本同目录下,内容写:

from PyInstaller.utils.hooks import collect_submodules

hiddenimports = collect_submodules('pandas._libs')

然后打包时加上这个钩子文件的目录:

pyinstaller --additional-hooks-dir . 你的脚本名.py

3. 清理旧的打包缓存再重新来

PyInstaller会缓存之前的打包信息,可能残留了Python2.7的旧依赖,导致冲突:

  • 删掉脚本目录下的builddist文件夹
  • 删掉生成的你的脚本名.spec文件
  • 然后重新执行打包命令

4. 检查你的运行环境(如果用了虚拟环境)

如果你是用虚拟环境跑Python3.6的,一定要确保打包时激活了这个虚拟环境,而且Pandas等所有依赖都是在这个虚拟环境里装的,别让系统全局的Python2.7依赖混进来干扰。

小提示:拿到完整的报错信息

你现在给的Traceback被截断了,其实可以直接在命令行里运行exe文件,控制台会输出完整的报错堆栈,这样能更精准地定位到底是Pandas的哪个部分没被打包进去。

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

火山引擎 最新活动