如何检测当前运行环境是否为 PyInstaller 打包的可执行文件
发布时间 - 2026-01-21 00:00:00 点击率:次最可靠的方式是检查 getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):打包时 sys.frozen 为 True 且 _MEIPASS 存在,开发时两者均不满足,可准确区分环境并获取正确路径。
可以通过检查 sys.frozen 属性是否存在且为 True 来判断当前是否运行在 PyInstaller 打包的可执行文件中。
检查 sys.frozen 是否为 True
PyInstaller 在打包后会将 sys.frozen 设置为 True,这是最直接、最可靠的检测方式:
- 在普通 Python 解释器中运行时,
sys.frozen属性不存在(访问会抛出AttributeError) - 在 PyInstaller 打包的程序中,
sys.frozen == True - 推荐写法(安全兼容):
import sys is_pyinstaller = getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS')
其中 _MEIPASS 是 PyInstaller 运行时解压资源的临时路径,与 frozen 一起使用可进一步确认环境,避免误判(例如某些其他打包工具也可能设置 frozen)。
获取可执行文件所在目录(区别于脚本路径)
打包后,__file__ 指向的是临时解压路径中的 .pyc 文件,不再反映原始位置。应使用:
-
sys._MEIPASS:PyInstaller 解压资源的绝对路径(仅在 frozen 状态下存在) - 常规获取“程序根目录”的推荐方式:
import sys import osdef get_root_path(): if getattr(sys, 'frozen', False):
打包后:可执行文件所在目录
return sys._MEIPASS else: # 开发时:.py 文件所在目录 return os.path.dirname(os.path.abspath(__file__))root = get_root
_path()
区分开发与发布环境的典型用途
该检测常用于以下场景:
- 动态加载资源(如图片、配置文件):路径需根据是否打包切换
- 日志路径、缓存目录等写入位置适配(避免写入只读的
_MEIPASS) - 调试开关:开发时启用详细日志或 GUI 调试窗口,发布时关闭
- 禁用某些仅开发需要的依赖(如
watchdog、auto-py-to-exe)
注意事项
不要依赖以下方式判断:
-
sys.executable名称(Windows 上可能为 python.exe 或 exe,但名称不固定,且可被重命名) -
__file__是否含.exe(打包后它通常指向.pyc,不是 exe) - 仅检查
hasattr(sys, '_MEIPASS')(某些旧版或非标准打包行为可能缺失)
稳妥做法始终是组合判断:getattr(sys, 'frozen', False) + hasattr(sys, '_MEIPASS')。
# python
# windows
# 工具
# 解压
# win
# 配置文件
# 区别
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
bootstrap日历插件datetimepicker使用方法
奇安信“盘古石”团队突破 iOS 26.1 提权
phpredis提高消息队列的实时性方法(推荐)
b2c电商网站制作流程,b2c水平综合的电商平台?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
高端网站建设与定制开发一站式解决方案 中企动力
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
黑客如何利用漏洞与弱口令入侵网站服务器?
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
如何在阿里云部署织梦网站?
智能起名网站制作软件有哪些,制作logo的软件?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
长沙做网站要多少钱,长沙国安网络怎么样?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Laravel怎么连接多个数据库_Laravel多数据库连接配置
Laravel安装步骤详细教程_Laravel环境搭建指南
网站建设保证美观性,需要考虑的几点问题!
如何在宝塔面板中修改默认建站目录?
如何在七牛云存储上搭建网站并设置自定义域名?
php结合redis实现高并发下的抢购、秒杀功能的实例
如何在建站宝盒中设置产品搜索功能?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
Laravel如何与Pusher实现实时通信?(WebSocket示例)
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何在VPS电脑上快速搭建网站?
如何在云主机快速搭建网站站点?
Laravel观察者模式如何使用_Laravel Model Observer配置
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
如何用5美元大硬盘VPS安全高效搭建个人网站?
怎么用AI帮你设计一套个性化的手机App图标?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
如何破解联通资金短缺导致的基站建设难题?
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何快速生成凡客建站的专业级图册?
免费视频制作网站,更新又快又好的免费电影网站?
Firefox Developer Edition开发者版本入口
Laravel如何使用Sanctum进行API认证?(SPA实战)
用v-html解决Vue.js渲染中html标签不被解析的问题
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel如何使用.env文件管理环境变量?(最佳实践)
非常酷的网站设计制作软件,酷培ai教育官方网站?
网站制作大概多少钱一个,做一个平台网站大概多少钱?


