AOSP开发中运行aidegen提示dataclasses模块缺失问题求助
解决AOSP aidegen运行时找不到dataclasses模块的问题
问题现象
运行aidegen时触发ModuleNotFoundError: No module named 'dataclasses',即使已经通过pip安装了该模块,无论虚拟环境内外都无法解决:
$: aidegen Traceback (most recent call last): File "/tmp/Soong.python_4y5nr8sq/__soong_entrypoint_redirector__.py", line 6, in <module> runpy._run_module_as_main("aidegen.aidegen_main", alter_argv=False) File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.6/runpy.py", line 85, in <module> exec(code, run_globals) File "/tmp/Soong.python_4y5nr8sq/aidegen/aidegen_main.py", line 50, in <module> from aidegen.lib import aidegen_metrics File "/tmp/Soong.python_4y5nr8sq/aidegen/lib/aidegen_metrics.py", line 24, in <module> from aidegen.lib import common_util File "/tmp/Soong.python_4y5nr8sq/aidegen/lib/common_util.py", line 40, in <module> from atest import atest_utils File "/tmp/Soong.python_4y5nr8sq/atest/atest_utils.py", line 45, in <module> from dataclasses import dataclass ModuleNotFoundError: No module named 'dataclasses'
执行pip安装时显示模块已存在:
$: pip install dataclasses Requirement already satisfied: dataclasses in <path_to_venv>/venv_3/lib/python3.6/site-packages
原因分析
AOSP的Soong构建系统在运行aidegen时,会创建一个独立的临时Python环境(路径如/tmp/Soong.python_xxxxxx/),这个环境不会加载你系统或虚拟环境中已安装的第三方模块,所以即使本地装了dataclasses也无法被识别。
解决方法
方法1:升级Python到3.7+
dataclasses是Python 3.7及以上版本的标准库,无需额外安装。如果你的AOSP构建环境允许,直接将Python版本升级到3.7或更高,即可彻底解决该问题。
方法2:临时复制dataclasses到Soong临时环境
- 先查找dataclasses模块的安装路径:
pip show dataclasses | grep -E "^Location:" | awk '{print $2}'
进入该路径,找到dataclasses文件夹。
2. 运行aidegen触发错误后,复制该文件夹到Soong临时环境目录(替换成实际的临时路径):
cp -r <dataclasses_folder_path> /tmp/Soong.python_4y5nr8sq/
注意:临时目录每次运行aidegen都会变化,此方法仅能临时解决,每次运行都需要重复操作。
方法3:设置PYTHONPATH指定模块路径
在运行aidegen前,设置环境变量让Soong读取你已安装dataclasses的路径:
export PYTHONPATH=<path_to_venv>/venv_3/lib/python3.6/site-packages aidegen
这样Soong的临时Python环境会加载该路径下的模块。
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

