# 路径对照 · 课堂演示件
#
# 作用：把程序运行时的四个位置打印出来。
#       直接运行一次，打包成 exe 之后再运行一次，对照两次的结果。
# 这是本周最值得亲手跑一遍的一个脚本。

import os
import sys
from pathlib import Path

print('=' * 56)

# ① 是不是打包过的程序。打包之后 sys.frozen 才存在
frozen = getattr(sys, 'frozen', False)
print('是打包过的程序吗：', '是' if frozen else '否（现在是直接运行 .py）')

# ② 源文件所在目录。打包之后指向临时解压目录，不是 exe 所在的地方
print('__file__ 所在目录　：', Path(__file__).parent)

# ③ 可执行文件所在目录。打包之后就是 exe 所在的那个文件夹
print('sys.executable 目录：', Path(sys.executable).parent)

# ④ 当前工作目录。取决于使用者从哪里启动，与程序放在哪里无关
print('当前工作目录　　　：', os.getcwd())

# ⑤ 打包时临时解压到哪里。只有打包后的单文件模式才有这一项
if hasattr(sys, '_MEIPASS'):
    print('临时解压目录　　　：', sys._MEIPASS)
else:
    print('临时解压目录　　　： 无（未打包）')

print('=' * 56)

# ⑥ 本周要记住的写法：数据文件放在 exe 旁边时，用下面这个函数定位
def app_dir():
    """程序所在目录。打包前后都能得到正确的位置"""
    if getattr(sys, 'frozen', False):
        return Path(sys.executable).parent
    return Path(__file__).parent


print('数据文件应当放在：', app_dir())
input('按回车键结束')
