预装Python3的Docker环境下Android repo工具运行报Python兼容类错误
AOSP repo初始化报错排查与修复
连续报错过程
- 最初在容器内执行
repo init -u https://android.googlesource.com/platform/manifest时,直接返回错误:/usr/bin/env: 'python': No such file or directory,此时容器仅配置安装了python3,没有可供调用的python命令入口。 - 完成python解释器安装适配后,再次执行命令触发新的报错:
repo: warning: Python 2 is no longer supported; Please upgrade to Python 3.6+. Traceback (most recent call last): File "/home/project/aosp/.repo/repo/main.py", line 56, in <module> from subcmds.version import Version File "/home/project/aosp/.repo/repo/subcmds/__init__.py", line 38, in <module> ['%s' % name]) File "/home/project/aosp/.repo/repo/subcmds/upload.py", line 27, in <module> from hooks import RepoHook File "/home/project/aosp/.repo/repo/hooks.py", line 472 file=sys.stderr) ^ SyntaxError: invalid syntax
当前repo部署方式
容器内的repo工具通过如下命令完成下载配置:
RUN mkdir -p /android_tools \ && curl https://storage.googleapis.com/git-repo-downloads/repo > /android_tools/repo \ && chmod a+x /android_tools/repo
问题根因
- 目前公开渠道拉取到的最新版repo脚本已经完全放弃对Python2的支持,运行要求最低为Python3.6版本。如果安装python解释器时,误把
python命令的软链接指向了旧版Python2,repo就会调用Python2解释器加载内置的纯Python3语法代码,直接触发语法解析失败的报错。 - 之前补装python解释器的操作只解决了“找不到python命令入口”的问题,没有对齐repo要求的运行版本,才会出现连锁报错。
修复操作指引
- 修正
python命令的软链接指向,将其关联到已安装的python3可执行文件,示例命令:ln -sf $(which python3) /usr/bin/python - 确保容器内Python版本不低于3.6,满足repo的最低运行要求
- 拉取repo安装脚本时,选择匹配Python3运行环境的稳定版本拉取,避免直接拉取未做兼容适配的主干开发分支代码
内容的提问来源于stack exchange,提问作者Poperton
相关产品推荐
相关产品推荐

