在写python程序中,有可能需要获取当前运行脚本的路径。打包成exe的脚本和直接运行地脚本在获取路径上稍微有点不同。
import os
import sys
config_name = 'myapp.cfg'
# determine if application is a script file or frozen exe
if getattr(sys, 'frozen', False):
application_path = os.path.dirname(sys.executable)
elif __file__:
application_path = os.path.dirname(os.path.abspath(__file__))
config_path = os.path.join(application_path, config_name)
sys.executable的作用是给出 python可执行文件的绝对路径。如果是Python脚本生成exe文件,则打印的是该exe文件的绝对路径。如果是脚本运行的话,返回的是python解析python.exe脚本的绝对路径。
关于getattr(sys, 'frozen', False):
程序需要知道当前是在PyInstaller打包后的环境运行还是在本地环境运行,运行PyInstaller的打包后的程序__PyInstaller的文档里有描写到,当程序是属于PyInstaller打包后的,它会在sys模块中添加'frozen'属性,通过简单的代码可以知道当前运行环境:
当我们是本地测试时候,__file__属性就能满足要求,当使用PyInstaller打包程序选择的是单文件夹打包,PyInstaller会将文件夹的路径信息存储在sys.MEIPASS中。当使用的是单文件打包的方式&#