标题里提及的执行方式python的执行方式是下面两种:
a) 用python 解释器运行脚本
b) 运行打包好的exe文件, 这个exe文件我是用pyinstaller生成的
针对这两种运行方式, 有时候我们需要拿到脚本的位置(a方式)
和exe的位置(b方式)
用pyinstaller打包脚本之后, 你会发现用 __file__ 拿不到运行exe的路径,
我们可以用 sys.executable 拿到exe的位置。
那么问题来了, 我们每次运行脚本的时候和打包的时候手动去修改这个获取方式太麻烦了
可以让程序自己判断自己是运行的脚本或者exe
在python cmd line里输入下面的内容
可以推理出,当时用解释器去launch 一个脚本的时候,sys.executable获取的是python解释器的位置
当时执行一个win exe时, sys.executable获取的是exe的位置
有了这个背景, 判断逻辑如下
if 'python.exe' in sys.executable:
# Launch python script
tool_path = os.path.dirname(os.path.abspath(__file__))
else:
# run the exe file generated by pyinstaller
tool_path = os.path.dirname(os.path.abspath(sys.executable))
有的同学可能觉得自己本地运行可能换解释器 比如python2.exe python3.exe
那这个判断逻辑就显得不是那么严密了, 这个时候你可以判断exe名字是否在sys.executable