如何查看os.path指向路径?PHP调用Python去背脚本路径问题求助
问题解决:PHP调用Python去背景脚本路径错误
当然可以打印os.path指向的路径,直接在卡住的代码行前加一行打印绝对路径的代码就行,能直观看到脚本实际寻址的位置:
# 打印解析后的绝对路径 target_path = os.path.join("../library/removeBG/models/", name, name + '.pth') print(os.path.abspath(target_path)) net.load_state_dict(self.torch.load(target_path, map_location="cpu"))
如果确认是路径问题,给你几个实用的解决办法:
改用绝对路径:
放弃相对路径,要么直接写死模型文件的绝对路径,要么用Python的__file__变量动态获取脚本所在目录,再拼接模型路径,示例:# 获取当前Python脚本的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 基于脚本目录拼接模型路径 model_path = os.path.join(script_dir, "../library/removeBG/models/", name, name + '.pth') # 转成绝对路径避免层级解析问题 model_path = os.path.abspath(model_path) net.load_state_dict(self.torch.load(model_path, map_location="cpu"))这种方式不管从哪个目录调用脚本,路径都会基于脚本本身的位置解析,不会出错。
切换工作目录:
PHP调用Python时,默认工作目录是PHP脚本所在的目录,而非Python脚本的目录,这会导致相对路径解析错误。可以在Python脚本开头切换工作目录到自身所在路径:import os # 切换到当前脚本所在目录 os.chdir(os.path.dirname(os.path.abspath(__file__))) # 之后再执行原有的路径拼接代码检查文件权限:
确认PHP运行的系统用户(比如Linux下的www-data、Windows下的IIS_IUSRS)拥有读取模型文件夹和.pth文件的权限,权限不足也会导致脚本卡在加载模型的步骤。
内容的提问来源于stack exchange,提问作者babak-maziar
相关产品推荐
相关产品推荐

