
def get_path():return os.path.dirname(os.path.realpath(__file__))
__file__ 在打包后指向临时解压目录:PyInstaller 会将 Python 脚本和依赖打包成单个可执行文件,运行时会在临时目录解压,__file__ 指向的是解压后的临时文件路径!
解决方案:
把获取路径的两种情况都考虑进去:
如果文件已经打包成.exe可执行文件了,那就通过sys.executable获取
如果文件未打包,还是原来的.py脚本,那就还是使用os.path.abspath(__file__)获取。
def get_executable_path():"""获取可执行文件所在目录(对于资源文件存储有用)"""if getattr(sys, 'frozen', False):return os.path.dirname(sys.executable)else:return os.path.dirname(os.path.abspath(__file__))
虽然使用绝对路径也能解决这个问题,但是一般不会这样做,因为如果使用绝对路径,必须把整个文件夹固定在那个目录才行,使用的时候不能随意的复制到其他位置使用了。
也有一种情况可以使用绝对路径,那就是被调用文件固定放到服务器的哪个共享位置,不需要本地化部署。