使用auto-py-to-exe打包
- 打开cmd,使用
pip install auto-py-to-exe;
- 安装完成之后,在cmd中使用
auto-py-to-exe直接打开该工具:

py文件路径导致的问题
- 因为在写py文件时,获取路径直接使用的是
current_dir=so.sys.path[0],在打包成exe之后,路径其实变成了一个虚拟路径,这样就会造成执行文件时找不到路径下对应的文件。
- 解决办法:将 os.sys.path[0] 替换为 os.path.dirname(sys.executable),这样在打包成 .exe 后会正确获取 .exe 文件所在的目录。
案例
# -*- coding: utf-8 -*-
import os
import sys
import win32com
import win32com.client
ppSaveAsJPG = 17
def ppt_to_jpg(ppt_file_name, output_dir_name):
'''将PPT另存为JPG格式
arguments:
ppt_file_name: 要转换的ppt文件,
output_dir_name:转换后的存放JPG文件的目录
'''
# 启动PPT
ppt_app = win32com.client.Dispatch('PowerPoint.Application')
# 设置为0表示后台运行,不显示,1则显示
ppt_app.Visible = 1
# 打开PPT文件
ppt = ppt_app.Presentations.Open(ppt_file_name)
# 另存为
ppt.SaveAs(output_dir_name, ppSaveAsJPG)
# 退出
ppt_app.Quit()
if __name__ == '__main__':
#current_dir = os.sys.path[0]
# 获取当前目录,适配打包后的路径
current_dir = os.path.dirname(sys.executable) if getattr(sys, 'frozen', False) else os.path.dirname(__file__)
dir_list = os.listdir(current_dir)
# 当前目录下所有的PPT文件,eg: ppt_name.ppt
ppt_file_names = (fns for fns in dir_list if fns.endswith(('.ppt', '.pptx')))
# 当前目录下所有的PPT文件名,这两者的区别在于有无后缀名,eg: ppt_name
ppt_names = (os.path.splitext(fns)[0] for fns in dir_list if fns.endswith(('.ppt', '.pptx')))
for ppt_file_name, ppt_name in zip(ppt_file_names, ppt_names):
# 该PPT的完整路径文件名,eg: F:\\test\\ppt_name.ppt
ppt_file_name = os.path.join(current_dir, ppt_file_name)
# 需要新建一个与PPT同名的文件,获取完整路径,eg: F:\\test\\ppt_name
ppt_dir_path = os.path.join(current_dir, ppt_name)
os.mkdir(ppt_dir_path)
# print ppt_file_name, ppt_dir_path
ppt_to_jpg(ppt_file_name, ppt_dir_path)
# getattr(sys, 'frozen', False):用于判断代码是否被打包成 .exe。
# os.path.dirname(sys.executable):获取 .exe 文件所在的目录。
# os.path.dirname(__file__):在未打包时,获取脚本文件所在的目录。
# 这样修改后,无论是直接运行脚本还是打包成 .exe,都能正确处理路径问题。