Python脚本相对路径依赖执行目录,如何实现任意位置运行都正常?
解决方案
报错的核心原因是:
.开头的相对路径默认基于执行python命令时的当前工作目录解析,而非脚本文件本身的存放目录,切换执行目录后路径解析结果就会出错。
方法1:使用os.path模块(兼容所有Python版本)
- 第一步:导入os模块,先获取当前脚本所在目录的绝对路径
import os # 获取当前脚本文件的绝对路径对应的所属目录 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
- 第二步:基于脚本目录拼接资源文件的相对路径(此处的相对路径以脚本文件的存放位置为基准,你的脚本与
resources目录同属files目录,所以按如下方式拼接)
font_path = os.path.join(SCRIPT_DIR, "resources", "COMIC.TTF")
- 第三步:替换原有路径调用即可
font = pygame.font.Font(font_path, 12)
方法2:使用pathlib模块(Python 3.4+ 推荐,语法更简洁)
- 第一步:导入Path类,获取脚本所在目录
from pathlib import Path SCRIPT_DIR = Path(__file__).resolve().parent
- 第二步:拼接资源路径
font_path = SCRIPT_DIR / "resources" / "COMIC.TTF"
- 第三步:调用时直接传入即可,如你使用的pygame版本不支持Path对象,转为字符串即可:
font = pygame.font.Font(str(font_path), 12)
注意事项
- 不要手动书写
/或\这类路径分隔符,用os.path.join或pathlib的/运算符可以自动适配不同操作系统的分隔符规则 - 拼接路径时使用的相对路径,要以脚本文件本身的存放位置为基准书写,而非执行命令的目录
内容的提问来源于stack exchange,提问作者Jeffery Tang
相关产品推荐
相关产品推荐

