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

PyInstaller打包--onefile后获取可执行文件路径的问题

解决PyInstaller --onefile打包后获取可执行文件所在目录的问题

当用PyInstaller的--onefile参数打包Python脚本时,程序运行会先把自身解压到系统临时目录,此时__file__指向的是临时目录里的脚本副本,而非你实际运行的可执行文件所在路径——这就是原路径方法失效的核心原因。

直接用以下代码即可正确获取可执行文件所在目录:

import sys
from pathlib import Path

def get_app_dir():
    # 检测是否为PyInstaller打包后的运行环境
    if getattr(sys, 'frozen', False):
        # 打包后sys.executable指向生成的可执行文件本身
        return Path(sys.executable).resolve().parent
    # 非打包环境,返回脚本所在目录
    return Path(__file__).resolve().parent

# 使用示例
basepath = get_app_dir()
filepath = basepath / "myfile"  # 用pathlib语法更简洁统一

关键说明

  • sys.frozen是PyInstaller为打包程序额外添加的属性,用来区分打包环境和普通Python运行环境
  • 打包后sys.executable不再指向Python解释器,而是指向你生成的可执行文件,通过它能拿到正确的可执行文件路径,取父目录就是目标目录
  • 之前尝试的os.realpath(__file__)无效,是因为打包后__file__指向临时目录中的解压文件,解析后还是临时路径,和可执行文件实际位置无关

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:05:24