python from sync import Sync giving script error ModuleNotFoundError: No module named 'sync'

python from sync import Sync giving script error ModuleNotFoundError: No module named 'sync'

我正在尝试使用 Qualcomm Ubuntu 下的材料为 DragonBoard 410c 构建自己的 Android 20。我已经从 Qualcomm 开发人员门户网站下载了文件,linux_android_board_support_package_vla.br_.1.2.7-01010-8x16.0-4.zip,包含我解压缩到文件夹 ~/Documents/linux_android_board_support_package_vla.br.1.2.7-01010-8x16.0-4 中的材料,使材料可用包括 shell 脚本 DB410c_build.sh.

解包和设置由 DB410c_build.sh 完成,它执行各种操作,例如使用 [=51= 使用的 python 文件生成 .repo 目录树] 脚本和下载源代码。

我 运行 发现了来自各种 python 脚本的许多语法错误,看来这是为 python 2 编写的,到目前为止我已经能够解决.顺便说一下,python --version 报告 python 2.7.18 但我仍然看到错误表明正在使用 python 3。

最近的错误来自python脚本,.repo/repo/subcmds/smartsync.py当它执行时,我得到以下错误,我一直无法找出或通过搜索找到解决方案。

Traceback (most recent call last):
  File "/home/rick/Documents/linux_android_board_support_package_vla.br.1.2.7-01010-8x16.0-4/APQ8016_410C_LA.BR.1.2.7-01010-8x16.0_6.0.1_Marsh_Mallo_P2/.repo/repo/main.py", line 42, in <module>
    from subcmds import all as all_commands
  File "/home/rick/Documents/linux_android_board_support_package_vla.br.1.2.7-01010-8x16.0-4/APQ8016_410C_LA.BR.1.2.7-01010-8x16.0_6.0.1_Marsh_Mallo_P2/.repo/repo/subcmds/__init__.py", line 33, in <module>
    mod = __import__(__name__,
  File "/home/rick/Documents/linux_android_board_support_package_vla.br.1.2.7-01010-8x16.0-4/APQ8016_410C_LA.BR.1.2.7-01010-8x16.0_6.0.1_Marsh_Mallo_P2/.repo/repo/subcmds/smartsync.py", line 16, in <module>
    from sync import Sync
ModuleNotFoundError: No module named 'sync'

完整的python源文件,smartsync.py如下:

#
# Copyright (C) 2010 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from sync import Sync

class Smartsync(Sync):
  common = True
  helpSummary = "Update working tree to the latest known good revision"
  helpUsage = """
%prog [<project>...]
"""
  helpDescription = """
The '%prog' command is a shortcut for sync -s.
"""

  def _Options(self, p):
    Sync._Options(self, p, show_smart=False)

  def Execute(self, opt, args):
    opt.smart_sync = True
    Sync.Execute(self, opt, args)

这只是从 https://developer.qualcomm.com/hardware/dragonboard-410c/software 试图使用

下载的文件中的 python 脚本的最新问题
Android Board Support Package 
vLA.BR.1.2.7-01010-8x16.0-4

之前的大部分错误都是由于 exceptraise 以及 print 的语法错误以及一些很容易出现的 import 错误造成的寻找解决方案(感谢 Whosebug!)。

但是我找不到关于这个的任何信息。

问题是由于文件夹 .repo/repo/subcmds 中的文件 smartsync.py 和该文件中的 from sync import Sync 语句存在语法错误。

sync 实际上引用的是文件 sync.py,它也位于文件夹 .repo/repo/subcmds 中,而不是 [=33] 主体外部的某些 python 文件=]源代码。

from 语句缺少文件 sync.py 所在的目录说明符 subcmds。为了从文件夹 subcmds 中的文件 sync.py 中导入 class Sync,代码行应该写成 from subcmds.sync import Sync。我认为这是因为 python 脚本是 运行,当前目录设置为 .repo/repo 而不是 .repo/repo/subcmds.

对文件进行此更改后,脚本 运行 成功,直到另一个文件中的下一个错误需要更正。