【python】PyInstaller打包

关于PyInstaller

将py文件打包成独立的可执行的文件,无需目标机器安装python环境即可运行程序。

  • 安装:pip install pyinstaller
  • 验证安装:pyinstaller --version
  • 参考:https://pyinstaller.org/en/stable/

使用PyInstaller

pyinstaller -F -i icon.ico python.py

生成文件:

  • dist/:存放生成的可执行文件
  • build/:临时构建文件(可删除)
  • __pycache__/:编译缓存(可删除)

常用参数:

  • -F:生成单个可执行文件
  • -D:默认参数,生成文件夹形式的可执行包
  • -w:隐藏控制台窗口(GUI程序专用)
  • -i icon.ico:指定程序图标
  • --clean:清理临时文件
  • -n name:指定生成文件名

注意事项

依赖处理

  • 程序中使用的外部资源(如图片/配置文件)需手动复制到dist/目录
  • 使用--add-data参数可自动包含资源文件

文件大小优化

  • 使用UPX压缩工具可减小生成文件体积
  • pyinstaller -F --upx-dir=/path/to/python.py

解决读取文件路径问题

  • PyInstaller会将你的脚本和依赖打包成一个可执行文件,运行时会在临时目录解压文件。此时:
    • 开发环境:文件路径基于脚本所在目录
    • 打包后环境:文件路径基于临时解压目录(sys._MEIPASS
  • 动态获取脚本所在目录
    • # 获取当前日期
      now = datetime.now()
      year = str(now.year)
      month = str(now.month).zfill(2)
      
      # 获取程序运行目录
      if getattr(sys, 'frozen', False):
          # 打包后环境:返回临时解压目录
          current_dir = os.path.dirname(sys.executable)
      else:
          # 开发环境:返回脚本所在目录
          current_dir = os.path.dirname(os.path.abspath(__file__))
          # 构建日志目录路径
          logs_dir = os.path.join(current_dir, 'logs', year, month)
      if not os.path.exists(logs_dir):
          os.makedirs(logs_dir)
          # 构建基础日志文件名
          base_log_file_name = os.path.join(logs_dir, f"{log_name}_{now.strftime('%Y%m%d')}")

 

 

 

THE END
分享
二维码
打赏
海报
【python】PyInstaller打包
关于PyInstaller 将py文件打包成独立的可执行的文件,无需目标机器安装python环境即可运行程序。 安装:pip install pyinstaller 验证安装:pyinstaller --ve……
<<上一篇
下一篇>>