PyInstaller打包exe后如何指定CSV输出文件路径?
PyInstaller打包后指定CSV输出到dist目录的解决方案
问题原因
PyInstaller用-F参数打包成单文件后,程序运行时的当前工作目录不一定是exe所在的dist目录,直接用相对路径生成文件会导致文件出现在不确定位置(比如命令行启动目录、桌面),而非预期的dist目录。
解决步骤
1. 动态获取exe所在绝对路径
在代码中添加逻辑,自动识别当前运行环境(开发/打包后),获取exe文件所在目录的绝对路径,需要导入os和sys模块。
2. 修改CSV生成代码
将原有的相对文件名拼接成exe目录下的完整绝对路径。
修改后的代码如下:
import os import sys import datetime as dt # ... 其他原有代码 ... except KeyboardInterrupt: timer.cancel() endTime = str(dt.datetime.now().time()) # 获取exe所在目录的绝对路径 if getattr(sys, 'frozen', False): # 打包运行环境 exe_dir = os.path.dirname(sys.executable) else: # 开发环境(保持原逻辑,输出到src目录) exe_dir = os.path.dirname(os.path.abspath(__file__)) # 构建输出文件的完整路径 op_file_name = f"{app.currdate}_{app.startTime[0:-7]}_{endTime[0:-7]}.csv".replace(":","-") op_file_path = os.path.join(exe_dir, op_file_name) app.getList().to_csv(op_file_path) print(f"O/P File generated at: {op_file_path}") sys.exit()
关键说明
getattr(sys, 'frozen', False):PyInstaller打包后会给sys添加frozen属性,用来区分开发/打包环境。sys.executable:打包后指向exe文件路径,取其目录就是dist目录;开发环境下用os.path.abspath(__file__)获取当前脚本所在的src目录,保证开发时逻辑不变。os.path.join():跨平台路径拼接,避免Windows下路径分隔符的兼容问题。
验证
重新执行你的PyInstaller命令打包后,将exe放在dist目录运行,CSV文件会直接生成在dist目录下。
内容的提问来源于stack exchange,提问作者dcs_2002
相关产品推荐
相关产品推荐

