Ubuntu18.04运行sawtooth keygen命令出现TypeError错误如何解决?
错误根因
该报错由 protobuf 版本不兼容导致:你安装的 Sawtooth 1.2.6 版本对应的 protobuf 代码是基于 3.6.x 及更低版本的 protobuf 生成的,而你本地环境的 protobuf 版本高于 3.7,3.7 及以上版本移除了旧版的 serialized_options 参数支持,导致旧生成代码调用时报错。
可用解决方法
- 方案一:降级本地 protobuf 到兼容版本
执行以下命令安装匹配的 3.6.1 版本 protobuf:
pip3 install protobuf==3.6.1
如果提示全局安装权限不足,可使用用户目录安装:
pip3 install --user protobuf==3.6.1
安装完成后重新执行 sawtooth keygen my_key 即可正常运行。
- 方案二:避免修改本地依赖,使用官方镜像执行命令
如果不想改动本地已安装的 protobuf 版本,可直接使用 Sawtooth 官方提供的对应版本 CLI 镜像执行操作,无需配置本地运行环境。 - 方案三:重新生成 protobuf 代码
若必须保留高版本 protobuf,可进入/usr/lib/python3/dist-packages/sawtooth_cli/protobuf/目录,使用当前本地安装的 protoc 编译器重新编译所有.proto文件,替换旧的自动生成的_pb2.py文件即可适配高版本 protobuf。
内容的提问来源于stack exchange,提问作者Ranski
相关产品推荐
相关产品推荐

