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

Pyinstaller打包exe后在其他PC提示Ghostscript未安装求助

问题原因与解决办法

核心原因

Camelot依赖Ghostscript的二进制文件,但Pyinstaller不会自动打包系统级的外部程序(比如Ghostscript);同时打包后的exe运行时会优先使用自身隔离的环境,可能无法正确识别同事电脑上全局安装的Ghostscript路径,哪怕已经添加到系统PATH。

解决方法

方法1:手动将Ghostscript打包进exe

  1. 找到你本地Ghostscript安装目录下的bin和lib文件夹(例如C:\Program Files\gs\gsX.X.X\bin、C:\Program Files\gs\gsX.X.X\lib)
  2. 修改Pyinstaller生成的spec文件,把这两个目录添加到datas参数中:
    a = Analysis(
        ['你的脚本文件名.py'],
        datas=[
            ('C:\\Program Files\\gs\\gsX.X.X\\bin', 'gs/bin'),
            ('C:\\Program Files\\gs\\gsX.X.X\\lib', 'gs/lib')
        ],
        # 其他原有参数保持不变
    )
    
  3. 在你的Python脚本开头添加路径配置代码,让camelot能找到打包后的Ghostscript:
    import os
    import sys
    from camelot import utils
    
    # 判断是否为打包后的运行环境
    if getattr(sys, 'frozen', False):
        # 获取打包后Ghostscript的bin目录路径
        gs_bin_path = os.path.join(sys._MEIPASS, 'gs', 'bin')
        # 将该路径加入系统PATH
        os.environ['PATH'] = gs_bin_path + os.pathsep + os.environ['PATH']
        # 强制指定camelot使用的Ghostscript执行文件路径(32位系统替换为gswin32c.exe)
        utils._find_gs = lambda: os.path.join(gs_bin_path, 'gswin64c.exe')
    
    # 后续正常调用camelot的代码
    import camelot
    tables = camelot.read_pdf('目标文件.pdf')
    
  4. 基于修改后的spec文件重新打包:pyinstaller 你的脚本文件名.spec

方法2:强制指定同事电脑上的Ghostscript路径

如果不想打包Ghostscript,可以让同事安装对应版本后,在脚本中直接写死路径:

from camelot import utils

# 让同事替换为他本地Ghostscript的实际安装路径(32位系统替换为gswin32c.exe)
utils._find_gs = lambda: 'C:\\Program Files\\gs\\gsX.X.X\\bin\\gswin64c.exe'

方法3:修复系统PATH读取问题

打包后的exe可能无法读取系统PATH的最新修改,可让同事:

  • 安装Ghostscript后重启电脑再运行exe
  • 或在exe快捷方式的属性中,手动将Ghostscript的bin目录添加到环境变量的PATH中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:06:02