1

我正在尝试在 Windows 上设置 AOSP VTS 测试。安装时,有一个 pip_requirements.txt 会尝试下载enum 包,稍后将在测试执行期间安装该包。运行测试用例时,存在导致 vts-run 失败的枚举相关问题。试运行时出现的错误如下图所示。

 ..\AppData\Local\Temp\pip-install-zp3vtjdn\enum\setup.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 应用程序将安装 enum 和一些其他模块,这仍然会导致此问题。该应用程序引用了一组 .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:\Python37\lib\enum.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 尝试下载/安装 enum 包时,如何重定向它以使用 Python3 枚举包而不使用 PyPI 的 enum 包?

提前致谢!!

4

1 回答 1

0

Python 3Enum不是 PyPI 的替代品enum——它们有不同的 API。如果正在安装的软件包确实需要 PyPI 版本,那么 stdlib 版本将不起作用。

于 2019-10-10T21:20:22.850 回答