Buildozer: NameError: name 'functools' is not defined
Buildozer: NameError: name 'functools' is not defined
我正在尝试使用 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.
在日志中我可以看到 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 版本与您编写的代码不匹配。您编写的代码适用于其他版本,但不适用于您正在使用的版本。
在 Ayaan 的帮助下,我找到了解决方法。正如他提到的,我正在使用 Python 3,同时尝试使用为 Python 2
设计的代码片段
正确的更改是 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 构建应用程序。在主要代码中,我正在导入 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.
在日志中我可以看到 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 版本与您编写的代码不匹配。您编写的代码适用于其他版本,但不适用于您正在使用的版本。
在 Ayaan 的帮助下,我找到了解决方法。正如他提到的,我正在使用 Python 3,同时尝试使用为 Python 2
设计的代码片段正确的更改是 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))])