在python中,如何获取脚本文件所在路径?
首先说明,不是获取“当前路径”,即os.getcwd()
这个问题包括两个容易混淆的问题,一是获取当前脚本文件所在的路径,二是获取启动python解释器的脚本所在的路径。
获取当前脚本文件所在路径,解决方案是1、2、3
获取启动python解释器的脚本文件所在路径,解决方案是4
当当前脚本是被直接运行的脚本(而不是被当作模块调用)时,两个问题的结果是一样的。
使用cx_freeze将脚本转换为可执行文件后,每种方案都会遇到自己的问题,不能在所有情况下都正确地获取当前文件路径。所以将几种办法结合起来,得到解决方案5,解决了所有问题。
1. 获取调用该函数的脚本所在路径,跨模块跨文件可调用的函数:
//tbc: 使用python解释器运行没有问题,编译成为exe后有问题,显示出来的是"当前路径",但不知道是为什么。我打印了一下inspect.stack(),发现文件名都对,但路径都是调用时的“当前路径”,不知道为什么?
# function: get the directory of script that calls this function
# usage: path = script_path()
def script_path():
import inspect, os
caller_file = inspect.stack()[1][1] # caller's filename