You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python创建文本文件代码VSCode运行正常,PyInstaller打包后无法生成文件?

问题成因

  • __file__是Python脚本运行时的内置属性,仅在.py源码执行环境下生效,指向当前脚本的本地路径。PyInstaller打包生成的是二进制可执行文件,运行时不存在原始.py文件,__file__属性的取值会异常甚至直接未定义,导致写入路径无效,无法生成目标文件。
  • PyInstaller打包程序运行时会默认加载临时缓存目录,即使__file__没有报错,最终生成的文件也可能被写入到临时目录,而非用户预期的可执行文件所在目录。

修复方案

兼容源码运行和打包后运行两种场景,调整路径获取逻辑即可,修改后的参考代码如下:

import os
import sys

# 判断当前运行环境
if getattr(sys, 'frozen', False):
    # 打包后运行:取可执行文件的所在目录
    base_dir = os.path.dirname(sys.executable)
    # 自定义生成的文件名,此处取可执行文件名加.txt后缀,可按需修改
    file_name = f"{os.path.basename(sys.executable)}.txt"
else:
    # 源码运行:取当前脚本的所在目录
    base_dir = os.path.dirname(os.path.abspath(__file__))
    # 自定义生成的文件名,此处取脚本名加.txt后缀,可按需修改
    file_name = f"{os.path.basename(__file__)}.txt"

# 拼接完整的文件路径
target_file = os.path.join(base_dir, file_name)

# 使用with上下文管理写入,自动释放文件句柄
with open(target_file, 'a', encoding='utf-8') as f:
    f.write('hello world')

额外注意

  • 打包时若使用--onefile参数,运行后文件会直接生成在可执行文件同级目录,符合预期。
  • 若生成结果不符合预期,可以打印target_file变量的值,确认路径是否匹配期望位置。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:12:00