Skip to content

Python 打包心得-程序篇

获取 exe 的执行目录

由于打包成一个文件的 exe 会解压到临时目录,所以使用 os.listdir 读取的是那个临时目录。因此使用 os.makedirs('./test') 或者 open('./log.txt, 'w') 等很常见操作都会出问题。

要用 os.chdir(os.path.dirname(os.path.abspath(sys.executable))) 才能改变成 exe 所在的实际目录。但如果不是 exe 而是日常使用 py 文件则又不对,所以最终改成:

# 正常运行 .py 文件时
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
if getattr(sys, 'frozen', False):
    # 被 PyInstaller 等工具打包后的执行路径
    BASE_DIR = os.path.dirname(sys.executable)

Comments