使用py2exe编译Python脚本后运行exe报错:_TSObject属性缺失
解决py2exe编译pandas脚本后exe运行报错的问题
我之前帮好几个开发者解决过这个问题,本质是py2exe和pandas的版本兼容坑——尤其是当你用了较新的pandas版本时,py2exe的旧逻辑会漏掉pandas内部的一些隐藏模块,导致运行exe时找不到pandas._libs.tslib._TSObject的对应属性。给你几个可行的解决办法:
1. 调整版本兼容性(最稳妥的方案)
py2exe对新版本pandas的支持一直不太理想,建议你降级到经过验证的稳定版本:
- 先卸载当前pandas,安装
0.24.2版本:pip uninstall pandas -y pip install pandas==0.24.2 - 同时升级py2exe到最新可用版本:
pip install --upgrade py2exe
2. 修改setup.py,强制包含pandas的隐藏模块
py2exe默认不会自动打包pandas的一些内部私有模块,你需要在setup.py里明确指定这些依赖:
from distutils.core import setup import py2exe, sys, os import matplotlib import numpy import pandas # 显式导入pandas from glob import glob sys.argv.append('py2exe') datafiles = [('Microsoft.VC90.CRT', glob(r'C:\Windows\WinSxS\amd64_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_99b61f5e8371c1d4\*.*'))] datafiles.extend(matplotlib.get_py2exe_datafiles()) setup( windows=['Run.py'], data_files=datafiles, # 强制包含pandas的核心模块及私有库 packages=['pandas', 'pandas._libs', 'pandas._libs.tslib'], options={ 'py2exe': { # 明确指定需要包含的依赖 'includes': ['numpy', 'matplotlib', 'pandas._libs.tslib'], # 排除不需要的绘图后端(如果你的脚本不用的话) 'excludes': ['_gtkagg', '_tkagg'], # 排除不必要的系统DLL 'dll_excludes': ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll'] } } )
3. 清理旧编译文件后重新打包
编译前一定要删除之前生成的dist和build文件夹,避免旧的缓存文件干扰新编译结果,然后重新运行:
python setup.py py2exe
4. 替代方案:改用PyInstaller(推荐)
如果不想折腾版本兼容,直接换用PyInstaller会省心很多——它对新版本pandas的支持远好于py2exe,配置也更简单:
- 安装PyInstaller:
pip install pyinstaller - 一键打包(单文件模式):
pyinstaller --onefile Run.py
生成的exe会在dist文件夹里,大部分情况下不需要额外配置就能正常运行。
内容的提问来源于stack exchange,提问作者Jen
相关产品推荐
相关产品推荐

