如何在Python包data子模块中共享file.json内容并解决路径问题
解决Python包内子模块共享JSON文件内容的问题
问题分析
你之前的代码存在两个核心问题:
- 读取JSON后赋值的变量
f未作为模块属性导出,子模块无法访问; - 使用绝对路径导致包打包成zip提交到Dataproc时路径失效——zip内的文件路径和本地绝对路径完全不同。
解决方案
1. 修正data/__init__.py代码
用包内相对路径读取JSON,并将数据作为模块级变量导出,确保所有子模块都能直接引用:
# data/__init__.py import json from pathlib import Path # 获取当前__init__.py所在的data目录路径 data_dir = Path(__file__).parent # 拼接file.json的完整路径 json_file_path = data_dir / "file.json" # 读取并解析JSON,将数据赋值给模块级变量(命名为json_data方便识别) with open(json_file_path, "r") as f: json_data = json.load(f)
这里用Path(__file__).parent能精准定位到data目录,不管包部署到什么环境(包括Dataproc的zip包),路径都能正确识别。
2. 子模块中访问JSON数据
在module_data1.py、module_data2.py等子模块里,直接从data模块导入导出的变量即可:
# data/module_data1.py from . import json_data # 直接使用json_data print(json_data["some_key"])
如果子模块需要从外部包路径引用,也可以用完整导入路径:
from package.data import json_data
这样不管包是本地运行还是打包成zip提交到Dataproc,都能正常读取JSON内容,且子模块可以直接访问数据。
内容的提问来源于stack exchange,提问作者Ala Tarighati
相关产品推荐
相关产品推荐

