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

PyInstaller打包Python2.7脚本getattr(sys,'frozen',False)不生效问题

PyInstaller打包后未进入sys.frozen判断分支问题解答

核心原因

你观察到的「未进入if分支」是假象,实际问题是getattr(sys, 'frozen', False)判断成立、进入分支后,分支内部代码执行抛出异常,且异常被外层try块捕获后无任何日志输出,导致程序直接静默退出,getattr(sys, 'frozen', False)本身功能正常。

问题根因拆解

你提供的脚本1代码中,add_config函数内的try块完整包裹了frozen判断逻辑,且你没有补充except分支的错误捕获输出逻辑:一旦分支内你标注为<some code>的部分执行出错,异常会被直接吞掉,不会打印任何错误提示,你自然看不到分支内的版本、序列号打印内容,误以为没有进入分支。

排查方案

你可以通过修改代码输出异常详情快速定位具体报错点,示例修改如下:

import sys
import traceback

def add_config(): 
    print("[+] Entered Add_config")
    try:
        if getattr(sys, 'frozen', False):
            # 你的原有业务代码
            <some code..>
            print("[+] Version:")
            print(<some code>)
            print("[+] Serial:")
            print(<some code>)
    # 新增异常捕获逻辑
    except Exception as e:
        print("[-] 分支内执行错误:%s" % str(e))
        print("[-] 错误堆栈信息:")
        traceback.print_exc()

if __name__ == "__main__":
   print("[+] Entered Main")
   add_config()

Mac + Python2.7 + PyInstaller3.6环境下常见的分支内报错场景

  • 路径错误:打包后可执行文件的运行目录、内置资源路径和脚本直接运行时不同,若分支内有读取相对路径的配置、资源文件的逻辑,极易触发文件不存在异常
  • 依赖缺失:如果分支内调用了PyInstaller未自动识别的第三方库、系统动态链接库,运行时会触发模块导入失败
  • 权限限制:Mac系统安全机制会阻止普通可执行文件访问敏感目录、修改系统配置,若分支内涉及这类操作会触发权限报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:12:02