我正在尝试在Windows上设置AOSP VTS测试。安装时,有一个pip_requirements.txt尝试下载枚举包,稍后将在测试执行期间安装该包。运行测试用例时,存在与枚举相关的问题,导致 vts-run 失败。测试运行期间出现的错误如下所示。
..AppDataLocalTemppip-install-zp3vtjdnenumsetup.py", line 24, in <module>
version = main_module.__version__
AttributeError: module 'enum' has no attribute '__version__'
参考 VTS 测试执行步骤:https://codelabs.developers.google.com/codelabs/android-vts/index.html?index=..%2F..index#1
点下载 -d %VTS_PYPI_PATH% -r pip_requirements.txt
注意:即使忽略pip_requirements.txt,看起来 vts tradefed 应用程序将安装枚举和几个其他模块,这仍然会导致此问题。该应用程序引用一组.jar文件,其源代码证实了这一点。另外,为了验证我尝试运行vts而不使用上述步骤下载模块。但仍然得到相同的枚举相关错误。
enum.__file__的属性如下所示:
>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import enum
>>> print(enum.__file__)
C:Python37libenum.py
经过一番分析,我发现 pip 正在下载的枚举包正在下载以下"https://pypi.org/project/enum/"。这个包也有一个 enum.py,这可能是导致属性错误的原因:
AttributeError: module 'enum' has no attribute '__version__'
PyPI页面链接提到:
被 Python 标准库取代。
Python 3 现在在其标准库中有一个枚举实现(也 可用于较旧的 Python 版本作为第三方 enum34 发行版(取代了此库。
我的理解是:既然 Python3 枚举包超越了 PyPI 枚举包,那么应该使用 Python3 枚举包而不是 PyPI 枚举包吧?
我的理解是对的吗?如果是这样,那么如何实现这一目标?即当 pip 尝试下载/安装枚举包时,如何重定向它以使用 Python3 枚举包而不使用 PyPI 的枚举包?
提前感谢!!
Python3Enum
不是PyPIenum
的直接替代品 - 它们有不同的API。 如果正在安装的软件包确实需要 PyPI 版本,那么 stdlib 版本将不起作用。