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

如何在Python模块内部正确引用存放在模块目录下的数据资产文件

模块内部引用同目录资产文件的解决方案

方法1:基于__file__属性拼接路径(全Python版本兼容)

这种方法不需要依赖额外的标准库特性,Python3.x全版本可用:

import os
import json

# 取当前模块文件的绝对路径,再提取所在目录
module_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接得到资产文件的绝对路径
asset_path = os.path.join(module_dir, "myasset.json")

# 正常读取即可
with open(asset_path, "r", encoding="utf-8") as f:
    data = json.load(f)

方法2:使用importlib.resources(Python3.9+推荐)

这是Python官方推荐的包资源访问方式,不需要手动处理路径拼接,适配打包、虚拟环境等各类场景:

from importlib.resources import files
import json

# 直接从当前包下读取资产文件内容
asset_content = files(__package__).joinpath("myasset.json").read_text(encoding="utf-8")
data = json.loads(asset_content)

注意事项

  • 如果你需要将模块打包发布,必须在打包配置中声明包含资产文件,否则安装后资产文件不会被同步到包目录:
    例如在pyproject.toml中添加配置:include = ["mymodule/*.json"]
  • 不要使用相对路径直接读取、也不要基于os.getcwd()拼接路径,这两者都依赖运行脚本时的工作目录,和模块本身的存储位置无关,会出现跨环境读取失败的问题。

内容的提问来源于stack exchange,提问作者Bart Friederichs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:15:08