当前位置: 首页 > news >正文

【python以打包的形式运行和脚本形式运行获取路径注意事项】

getattr(sys, 'frozen', False) 是 Python 里用于判断程序是否以打包后的可执行文件形式运行的常用代码。下面详细解释其作用:

代码分析

  • sys 是 Python 的标准库模块,提供了与 Python 解释器和系统相关的功能与变量。
  • getattr() 是 Python 的内置函数,其作用是获取对象的属性值。该函数接收三个参数:对象、属性名和默认值。若对象存在指定属性,就返回该属性的值;若不存在,则返回默认值。
  • 'frozen' 是一个属性名。当 Python 程序被打包成可执行文件(如使用 PyInstaller、cx_Freeze 等工具)时,sys 模块会添加一个名为 frozen 的属性。
  • False 是默认值。若 sys 模块没有 frozen 属性,getattr() 函数就会返回 False

示例代码

import os
import sys

# 获取运行目录(适配打包后的exe)
if getattr(sys, 'frozen', False):
    # 运行在打包后的exe中
    BASE_DIR = sys._MEIPASS
    ROOT_DIR = os.path.dirname(sys.executable)
else:
    # 正常以脚本形式运行
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    ROOT_DIR = BASE_DIR


应用场景

  • 资源路径处理:在打包后的可执行文件里,资源文件(像图片、配置文件等)的路径和 Python 脚本运行时的路径可能不同。通过判断 sys.frozen 属性,能使用不同的路径来访问资源。
  • 调试信息:在开发和调试阶段,可能需要输出更多的调试信息;而在打包后的可执行文件中,这些调试信息可能不需要。借助判断 sys.frozen 属性,可控制是否输出调试信息。

这两行代码主要用于处理Python程序打包成可执行文件后,文件路径相关的操作,下面为你详细解释每一行代码:

1. BASE_DIR = sys._MEIPASS

代码功能

这行代码的作用是获取Python程序打包成可执行文件后,临时资源文件夹的路径,并将其赋值给变量BASE_DIR

详细解释
  • sys 是Python的标准库模块,它提供了许多与Python解释器和系统相关的变量和函数。
  • _MEIPASS 是PyInstaller打包工具在打包程序时,添加到sys模块中的一个属性。当使用PyInstaller将Python程序打包成可执行文件时,它会将程序依赖的资源(如图片、配置文件等)提取到一个临时文件夹中,sys._MEIPASS 就指向这个临时文件夹的路径。
应用场景

在打包后的程序中,如果需要访问这些依赖资源,就可以使用 BASE_DIR 作为基础路径来构建资源文件的完整路径。例如:

import sys
import os

BASE_DIR = sys._MEIPASS
# 假设资源文件夹中有一个名为 'example.txt' 的文件
file_path = os.path.join(BASE_DIR, 'example.txt')

2. ROOT_DIR = os.path.dirname(sys.executable)

代码功能

这行代码的作用是获取当前可执行文件所在的目录路径,并将其赋值给变量ROOT_DIR

详细解释
  • sys.executablesys 模块的一个属性,它返回当前Python解释器或者打包后的可执行文件的完整路径。
  • os.path.dirname()os.path 模块中的一个函数,它接受一个文件路径作为参数,并返回该文件所在的目录路径。
应用场景

在程序中,如果需要操作与可执行文件同目录下的文件,就可以使用 ROOT_DIR 作为基础路径。例如,在可执行文件所在目录下创建一个新的文件:

import sys
import os

ROOT_DIR = os.path.dirname(sys.executable)
new_file_path = os.path.join(ROOT_DIR, 'new_file.txt')
with open(new_file_path, 'w') as f:
    f.write('This is a new file.')

总结

这两行代码通常用于处理Python程序打包成可执行文件后的路径问题,sys._MEIPASS 用于获取临时资源文件夹的路径,os.path.dirname(sys.executable) 用于获取可执行文件所在的目录路径。

相关文章:

  • GStreamer开发笔记(一):GStreamer介绍,在windows平台部署安装,打开usb摄像头对比测试
  • Open CASCADE学习|读取点集拟合样条曲线(续)
  • 碰一碰发视频源头开发技术服务商
  • CentOS 7 yum 无法安装软件的解决方法
  • oracle 快速创建表结构
  • C语言基础20
  • 基于SpringBoot的“智慧医疗采购系统”的设计与实现(源码+数据库+文档+PPT)
  • 【题解】AtCoder AT_abc400_c 2^a b^2
  • d202547
  • AF3 OpenFoldMultimerDataModule类解读
  • 【零基础入门unity游戏开发——动画篇】Animation动画窗口,创建编辑动画
  • uniapp微信小程序地图marker自定义气泡 customCallout偶尔显示不全解决办法
  • 本地大模型构建个人知识库(Ragflow)
  • Oracle序列介绍
  • Web开发:常用 HTML 表单标签介绍
  • 数据类型与判断
  • 【后端开发面试题】每日 3 题(三十)
  • CentralCache
  • 登录窗口布局
  • 具身智能零碎知识点(一):深入解析Transformer位置编码
  • 蒙牛企业网站建设规划书/公司产品推广文案
  • 襄阳门做网站/网络营销网站推广
  • 凡科快图网站/直通车关键词优化口诀
  • 东莞学校网站建设/百度云官网
  • 乐清网站设计公司哪家好/seo三人行网站
  • 找网络公司做网站/百度手机助手app下载