Buildozer:NameError:未定义名称'functools'

Posted

技术标签:

【中文标题】Buildozer:NameError:未定义名称\'functools\'【英文标题】:Buildozer: NameError: name 'functools' is not definedBuildozer:NameError:未定义名称'functools' 【发布时间】:2020-11-12 01:45:14 【问题描述】:

我正在尝试使用 Buildozer 构建应用程序。在我导入functools 的主代码中。该代码在计算机上运行正常,但是当我尝试在 android 上运行它时,我得到NameError: name 'functools' is not defined

我尝试将它添加到buildozer.spec 要求中,但这会产生不同的错误:

File "/tmp/pip-install-ef316qvg/functools/functools.py", line 34
raise TypeError, 'compose expects at least one argument'
               ^
SyntaxError: invalid syntax
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

Full log here

在日志中,我可以看到 buildozer 正在尝试安装 functools,但据我所知,它已经安装了 /usr/lib64/python3.7/functools.py 并且可以导入。

谁能告诉我这是怎么回事?

编辑:我查看了 functools 版本:

>>> from getversion import get_module_version
>>> import functools
>>> version, details = get_module_version(functools)
>>> print(version)
3.7.7.final.0
>>> print(details)
Version '3.7.7.final.0' found for module 'functools' by strategy 'get_builtin_module_version', after the following failed attempts:
 - Attempts for module 'functools':
   - <get_module_version_attr>: module 'functools' has no attribute '__version__'
   - <get_version_using_pkgresources>: Invalid version number: None
   - <get_builtin_module_version>: SUCCESS: 3.7.7.final.0

【问题讨论】:

看起来你使用的是旧的 Python 版本。 您好,感谢您的评论。你能说得更具体点吗? 将其添加到 buildozer.spec 会导致它尝试安装 this package,这不是您想要的 - 它来自 2005 年,并给出错误,因为它使用旧语法来提升例外。原来NameError怕是帮不上忙了。 【参考方案1】:

我认为您使用的 python 版本与您编写的代码不匹配。您编写的代码适用于其他版本,但不适用于您正在使用的版本。

【讨论】:

这是可能的,我正在尝试关注这个话题***.com/questions/47510030/…你能帮我弄好吗?我不知道版本之间的区别。编辑:问题在线return reduce(lambda a, b: a and b, [True if p == 0 else False for p in map(checkperm, permissions)]) 我对此不太熟悉,但我建议您更新 python 并检查网络是否有类似的程序以及错误。这将使您对所面临的问题有所了解。 如果对您有帮助,请接受并投票。【参考方案2】:

在 Ayaan 的帮助下,我找到了解决方法。正如他提到的,我正在使用 Python 3,同时尝试使用为 Python 2 设计的代码 sn-p

正确的更改是reduce() -> functools.reduce()map() -> list(map())

return functools.reduce(lambda a, b: a and b,
    [True if p == 0 else False for p in list(map(checkperm, permissions))])

【讨论】:

以上是关于Buildozer:NameError:未定义名称'functools'的主要内容,如果未能解决你的问题,请参考以下文章

NameError:名称'unicode'未定义[重复]

NameError:名称'python'未定义[关闭]

NameError:名称“”未定义[关闭]

NameError:未定义全局名称“reduce”

NameError:未定义名称“convertToBinaryData”

输入():“NameError:名称'n'未定义”[重复]