You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python自定义包中如何正确指定YAML文件的路径?

Python自定义包中如何正确指定YAML文件的路径?

嗨,这个问题我之前踩过一模一样的坑!你用相对路径找不到文件的核心原因是:当你把包安装到其他项目后,代码运行时的工作目录并不是你包所在的目录——那些./data.yml之类的相对路径,都是相对于当前运行脚本的工作目录来解析的,自然找不到包内的文件啦。

给你两种靠谱的解决方案,都是获取包内文件的绝对路径,彻底摆脱工作目录的影响:

方法一:用pathlib(推荐,现代Python风格)

在package/data/constants.py里,利用__file__变量(它指向当前脚本文件的绝对路径)来定位data.yml:

# package/data/constants.py
from pathlib import Path

# 获取当前constants.py所在的data目录的绝对路径
current_dir = Path(__file__).parent
# 拼接出data.yml的绝对路径
DATA_PATH = current_dir / "data.yml"

然后在main.py里直接用这个路径就好:

# package/main/main.py
from package.data.constants import DATA_PATH
import yaml

with open(DATA_PATH, 'r') as f:
    data = yaml.safe_load(f)

这种方法的好处是直观易懂,pathlib的路径拼接也比字符串拼接更可靠,而且不管你的包被安装到系统的哪个位置,这个路径都会是准确的。

方法二:用importlib.resources(适合Python 3.9+)

如果你用的是Python 3.9及以上版本,可以用标准库的importlib.resources来读取包内文件,甚至不需要手动处理路径:

# package/data/constants.py
from importlib.resources import files

# 获取data.yml的路径对象
DATA_PATH = files("package.data").joinpath("data.yml")

使用方式和上面一样,直接打开DATA_PATH即可。

关键提醒:别忘了把data.yml打包进安装包!

不管用哪种方法,你都需要确保data.yml在安装包的时候被一起复制过去,不然即使路径对了,文件也不存在。

如果你用setuptools,可以在pyproject.toml里加上:

[tool.setuptools.package-data]
"package.data" = ["data.yml"]

如果用poetry,则在pyproject.toml里添加:

[tool.poetry]
# 其他配置...
include = ["package/data/data.yml"]

这样安装包的时候,data.yml就会被正确包含进去啦。

备注:内容来源于stack exchange,提问作者CSSer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:37:43