路径的坑基于项目根解析 vs 运行时 cwd一个幽灵 Bug同样的代码换目录就跑不通你用os.getcwd()或相对路径temp/存文件在自己电脑上跑得好好的换个启动方式比如双击 .bat、任务计划、打包成 exe就找不到文件了。为什么因为运行时的当前工作目录cwd不可靠。谁启动你cwd 就是谁的。从项目根启动是项目根从桌面双击图标可能就是别的目录。第一性原理别赌 cwd锚定项目根正确做法是把所有关键路径临时目录、输出目录基于项目根目录解析而不是依赖 cwd。项目根一旦确定路径就稳定。# 拿到本文件所在目录向上定位项目根PROJECT_ROOTPath(__file__).resolve().parent.parent TEMP_DIRos.path.join(PROJECT_ROOT,temp_folder)OUTPUT_DIRos.path.join(PROJECT_ROOT,output)Path(__file__).resolve()是本文件的绝对路径这个在任何启动方式下都稳定因为它是代码在哪而不是你在哪运行。cwd 的影子是因为死锁用 cwd 还有个连锁坑你以为你在写temp/xx.xlsx实际写到别处的temp/。而且 cwd 变了之前存的相对路径全失效——同一个程序内部对同一路径的两次引用可能指向不同文件。这是路径 bug 里最阴险的一种。我们项目里的处理引擎里临时目录、输出目录都基于项目根解析# engine 初始化时定死目录self.temp_diros.path.join(PROJECT_ROOT,temp_folder)self.output_diros.path.join(PROJECT_ROOT,self.config.output_dir)不在每个函数里os.getcwd()现算启动时就定好全程复用。什么时候可以用 cwdsys.argv[0]定位脚本偶尔可以但打包后不可靠。你想让用户自定义输出位置用配置别用 cwd 推导。一句话所有关键路径锚定项目根基于__file__永远别依赖运行时 cwd。这一条能帮你避开一大半换机器/换启动方式就丢文件的鬼问题。