使用auto-py-to-exe(基于PyInstaller)打包Pandas代码遇TypeError
解决auto-py-to-exe打包Pandas时scipy hook加载失败的问题
以下是几种无需重装整个原环境的解决方案,按优先级排序:
1. 修复scipy安装
原环境中scipy可能存在安装损坏或路径异常,导致PyInstaller无法识别其位置:
- 卸载并重装scipy:
pip uninstall -y scipy pip install scipy - 若使用conda环境:
conda remove --force scipy conda install scipy
2. 自定义hook跳过scipy加载错误
PyInstaller的hook-scipy.py未处理get_module_file_attribute('scipy')返回None的情况,可通过自定义hook覆盖官方逻辑:
- 在项目根目录创建
hook-scipy.py,写入以下内容:from PyInstaller.utils.hooks import get_module_file_attribute def hook(hook_api): try: # 尝试获取scipy路径,避免抛出TypeError scipy_path = get_module_file_attribute('scipy') # 保留原hook的必要逻辑(如需) except TypeError: # 路径获取失败时直接跳过,不触发报错 pass - 在auto-py-to-exe的Advanced选项中,添加参数
--additional-hooks-dir .,将当前目录设为自定义hook目录。
3. 升级相关依赖版本
旧版本的PyInstaller或pandas可能存在兼容性问题,升级到最新版可修复hook逻辑缺陷:
pip install --upgrade auto-py-to-exe pyinstaller pandas
4. 克隆原环境用于打包
无需修改原环境,复制一份干净的环境来执行打包操作:
- 导出原环境依赖列表:
pip freeze > requirements.txt - 创建新虚拟环境并安装所有依赖:
python -m venv pack_env # Windows激活环境:pack_env\Scripts\activate # Linux/macOS激活环境:source pack_env/bin/activate pip install -r requirements.txt pip install auto-py-to-exe - 在新环境中执行打包操作,原环境不受影响。
内容的提问来源于stack exchange,提问作者jxfuller1
相关产品推荐
相关产品推荐

