Python新手运行代码出现sys模块无_MEIPASS属性AttributeError报错如何解决
报错产生的原因
sys._MEIPASS 是PyInstaller专属的运行时属性,仅当Python脚本被PyInstaller打包为独立EXE可执行文件后,运行EXE时才会被注入到sys模块中,指向程序运行时临时解压资源文件的目录。你直接通过Python解释器运行原始.py格式的脚本时,sys模块不存在这个属性,因此会触发AttributeError。
修复方案
- 兼容两种运行场景,替换原代码中读取sample.jpg的逻辑,增加属性判断:
将原代码中的对应代码段:
file_name = sys._MEIPASS + "/sample.jpg" subprocess.Popen(file_name, shell=True)
替换为以下内容:
if hasattr(sys, "_MEIPASS"): # EXE打包运行场景,读取PyInstaller临时解压目录 base_dir = sys._MEIPASS else: # 直接运行py脚本场景,读取当前脚本所在目录 base_dir = os.path.dirname(os.path.abspath(__file__)) file_name = os.path.join(base_dir, "sample.jpg") subprocess.Popen(file_name, shell=True)
- 若你需要打包为EXE使用,执行PyInstaller打包命令时需要添加参数将sample.jpg打包到程序内,Windows下打包命令参考:
pyinstaller -F -w --add-data "sample.jpg;." 你的脚本文件名.py
打包完成后运行生成的EXE即可正常读取图片资源。
注:当前代码包含系统驻留、远程控制的恶意逻辑,仅可用于合法的安全研究测试,禁止用于非法入侵他人设备,否则将承担相应法律责任。
内容的提问来源于stack exchange,提问作者udhaya1988
相关产品推荐
相关产品推荐

