使用py2exe打包Python脚本失败:输入路径后控制台闪退无报错
问题与解决方案
问题背景
使用py2exe打包Python脚本(PyInstaller打包正常)后,运行可执行文件时输入路径控制台立即关闭,无报错信息。
涉及代码
业务脚本 Convert_nc_to_txt.py
import os import pandas as pd import glob as glob x = input(r'') os.chdir(x) files = glob.glob("*.nc") print(files) for file in files: print(file) ds = xarray.open_dataset(file) name = file.split('.') df = ds.to_dataframe() df.to_csv(name[0] + '.txt', sep ='\t')
打包脚本 setup.py
from distutils.core import setup import py2exe from py2exe import freeze freeze( console=['Convert_nc_to_txt.py'], data_files=None, zipfile='library.zip', options={"py2exe":{"excludes":["scipy"],"includes":["xarray","pandas","glob"]}})
打包命令:python setup.py py2exe
排查与解决步骤
1. 修复脚本自身错误并捕获异常
原脚本存在**未导入xarray**的问题,PyInstaller可能通过隐式导入自动处理,但py2exe不会识别这类隐式依赖,这是导致闪退的核心原因之一。同时添加异常捕获和窗口暂停,便于查看报错:
修改后的Convert_nc_to_txt.py:
import os import pandas as pd import glob as glob import xarray # 补充缺失的导入 try: x = input(r'请输入目标路径:') os.chdir(x) files = glob.glob("*.nc") print(files) for file in files: print(file) ds = xarray.open_dataset(file) name = file.split('.') df = ds.to_dataframe() df.to_csv(name[0] + '.txt', sep='\t') except Exception as e: print(f"错误信息:{str(e)}") input("按任意键退出...") # 暂停窗口查看报错内容
2. 优化py2exe打包配置
py2exe对依赖的自动检测能力较弱,需手动补充必要依赖并调整打包参数:
修改后的setup.py:
from distutils.core import setup import py2exe from py2exe import freeze freeze( console=['Convert_nc_to_txt.py'], data_files=None, zipfile=None, # 禁用压缩包,将依赖直接放入dist目录,避免模块加载问题 options={ "py2exe": { "excludes": ["scipy"], "includes": ["xarray", "pandas", "glob", "netCDF4", "numpy"], # 补充xarray的底层依赖 "bundle_files": 3, # 不打包为单文件,便于排查依赖缺失 "dll_excludes": ["MSVCP90.dll"] # 排除系统自带的冗余DLL } } )
3. 手动验证打包结果
- 避免双击运行exe,而是从已打开的命令行窗口中进入
dist目录,执行Convert_nc_to_txt.exe,这样即使程序报错,控制台也不会立即关闭 - 检查
dist目录,确认xarray、netCDF4等依赖模块的文件夹已存在 - 若仍有问题,可在
setup.py的py2exe选项中添加"debug": True,重新打包时查看详细的依赖检测日志,定位缺失的模块
内容的提问来源于stack exchange,提问作者Cosis94
相关产品推荐
相关产品推荐

