错误提示
最近在使用Ubuntu22.04搭建OpenHarmony编译环境,在执行hb set
命令选择开发板时出现如下报错:
详细log如下:
fangye@fangye-virtual-machine:~/niobeu4_src$ hb set
[OHOS ERROR] Traceback (most recent call last):
[OHOS ERROR] File "/home/fangye/.local/lib/python3.10/site-packages/hb/__main__.py", line 84, in main
[OHOS ERROR] status = args.command(args)
[OHOS ERROR] File "/home/fangye/niobeu4_src/build/lite/hb_internal/set/set.py", line 45, in exec_command
[OHOS ERROR] return set_product() == 0
[OHOS ERROR] File "/home/fangye/niobeu4_src/build/lite/hb_internal/set/set.py", line 62, in set_product
[OHOS ERROR] product_info = Product.product_menuconfig()
[OHOS ERROR] File "/home/fangye/niobeu4_src/build/lite/hb_internal/common/product.py", line 260, in product_menuconfig
[OHOS ERROR] product = menu.list_promt('product', 'Which product do you need?',
[OHOS ERROR] File "/home/fangye/niobeu4_src/build/lite/hb_internal/cts/menuconfig.py", line 34, in list_promt
[OHOS ERROR] return self._promt(questions, **kwargs)
[OHOS ERROR] File "/home/fangye/niobeu4_src/build/lite/hb_internal/cts/menuconfig.py", line 25, in _promt
[OHOS ERROR] prompt = importlib.import_module('hb_internal.cts.prompt')
[OHOS ERROR] File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
[OHOS ERROR] return _bootstrap._gcd_import(name[level:], package, level)
[OHOS ERROR] File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
[OHOS ERROR] File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
[OHOS ERROR] File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
[OHOS ERROR] File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
[OHOS ERROR] File "<frozen importlib._bootstrap_external>", line 883, in exec_module
[OHOS ERROR] File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
[OHOS ERROR] File "/home/fangye/niobeu4_src/build/lite/hb_internal/cts/prompt.py", line 21, in <module>
[OHOS ERROR] from prompt_toolkit.shortcuts import run_application
[OHOS ERROR] File "/home/fangye/.local/lib/python3.10/site-packages/prompt_toolkit/__init__.py", line 16, in <module>
[OHOS ERROR] from .interface import CommandLineInterface
[OHOS ERROR] File "/home/fangye/.local/lib/python3.10/site-packages/prompt_toolkit/interface.py", line 19, in <module>
[OHOS ERROR] from .application import Application, AbortAction
[OHOS ERROR] File "/home/fangye/.local/lib/python3.10/site-packages/prompt_toolkit/application.py", line 8, in <module>
[OHOS ERROR] from .key_binding.bindings.basic import load_basic_bindings
[OHOS ERROR] File "/home/fangye/.local/lib/python3.10/site-packages/prompt_toolkit/key_binding/bindings/basic.py", line 9, in <module>
[OHOS ERROR] from prompt_toolkit.renderer import HeightIsUnknownError
[OHOS ERROR] File "/home/fangye/.local/lib/python3.10/site-packages/prompt_toolkit/renderer.py", line 11, in <module>
[OHOS ERROR] from prompt_toolkit.styles import Style
[OHOS ERROR] File "/home/fangye/.local/lib/python3.10/site-packages/prompt_toolkit/styles/__init__.py", line 8, in <module>
[OHOS ERROR] from .from_dict import *
[OHOS ERROR] File "/home/fangye/.local/lib/python3.10/site-packages/prompt_toolkit/styles/from_dict.py", line 9, in <module>
[OHOS ERROR] from collections import Mapping
[OHOS ERROR] ImportError: cannot import name 'Mapping' from 'collections' (/usr/lib/python3.10/collections/__init__.py)
[OHOS ERROR] Unhandled error: cannot import name 'Mapping' from 'collections' (/usr/lib/python3.10/collections/__init__.py)
原因分析
在Ubuntu20.04上没有这个问题,其python版本为3.8.x,而Ubuntu22.04的python版本是3.10.x,由于hb命令是用python写的,故猜测这是由于python版本导致的问题。
根据报错提示信息:
Unhandled error: cannot import name 'Mapping' from 'collections'
可以知道报错原因是导入Mapping包时失败,在往上搜一下这个报错,果然有很多人遇到类似的问题,报错信息跟这个情况很像:
https://blog.csdn.net/hongel110/article/details/121333144
解决办法
修改报错的python脚本,将from collections import Mapping
修改为from collections.abc import Mapping
即可:
vim ~/.local/lib/python3.10/site-packages/prompt_toolkit/styles/from_dict.py