Mas*_*son 10 python setuptools package python-packaging
我正在打包一个 python 包,我将其称为MyPackage.
包结构为:
MyPackage/
script.py
data.json
Run Code Online (Sandbox Code Playgroud)
该data.json文件包含读取的缓存数据script.py。
我已经想出了如何包含数据文件(使用 setuptoolsinclude_package_data=True并在文件中包含数据文件的路径MANIFEST.in)但是现在当我 pip 安装此包并导入已安装的 MyPackage(当前测试安装pip来自 GitHub 存储库)我得到FileNotFound脚本中使用 MyPackage的异常 (data.json)。但是,我看到该data.json文件确实安装在Lib/site-packages/MyPackage.
通过尝试读取json包中的文件,我在这里做错了吗?
请注意,在script.py我试图读data.json为open('data.json', 'r')
我是否搞砸了有关数据文件路径的问题?
Arn*_*rne 12
你没有搞砸什么,访问包资源只是有点棘手 - 主要是因为它们可以打包成你的 .json 严格来说可能不作为安装包的系统上的实际文件存在的格式(例如作为zip -应用程序)。访问数据文件的正确方法不是指定它的路径(如"MyPackage/data.json"),而是将其作为已安装包的资源(如"MyPackage.data.json")进行访问。这种区别可能看起来很迂腐,但它可能很重要。
无论如何,应该使用内置importlib.resources模块进行访问:
import importlib.resources
import json
with importlib.resources.open_text("MyPackage", "data.json") as file:
data = json.load(file)
# you should be able to access 'data' like a dictionary here
Run Code Online (Sandbox Code Playgroud)
如果您碰巧使用低于 3.7 的 python 版本,则必须importlib_resources从 pyPI安装它。
| 归档时间: |
|
| 查看次数: |
2422 次 |
| 最近记录: |