Python导入messages模块报错:box模块无_to_json属性问题求助
错误根因
- 你当前安装的
python-box依赖包版本过高,messages模块依赖的jsonconfig库调用了python-box的私有接口_to_json,该接口在python-boxv6及以上版本已被移除。 - 额外注意:你现在安装的第三方
messages库是消息通知工具库,如果你是为了解析protobuf消息才导入messages,说明你错装了依赖,你需要的是自己通过protoc编译.proto文件生成的messages模块,而非pypi上的这个第三方库。
解决方案
方案1:降级适配(适合确实需要使用第三方messages库的场景)
执行如下命令降级python-box到兼容版本即可:
pip install python-box==5.4.1
安装完成后重新执行导入操作即可正常运行。
方案2:优先加载自己的protobuf生成模块(适合解析protobuf的场景)
你不需要安装第三方messages库,只需要把protoc编译生成messages.py的目录加到Python搜索路径即可,例如生成的文件存放在当前目录的proto_output文件夹下,先执行以下代码再导入:
import sys sys.path.append("./proto_output")
之后导入的messages就是你自己编译的protobuf模块,不会触发第三方库的报错。
方案3:手动修改兼容代码
如果不想降级依赖,你可以直接修改报错的源码文件,打开/usr/local/lib/python3.8/dist-packages/jsonconfig/jsonutils.py,找到第29行:
to_json = box._to_json
修改为:
to_json = box.Box.to_json
修改后保存重新运行即可适配新版python-box。
内容的提问来源于stack exchange,提问作者user4981459
相关产品推荐
相关产品推荐

