Как использовать enum из Python3, а не enum из PyPI - проблема во время установки Android VTS в Windows?

Я пытаюсь настроить тест AOSP VTS ​​в Windows. При установке имеется файл 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

загрузка pip -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:\Python37\lib\enum.py

После некоторого анализа я обнаружил, что пакет enum, который загружается с помощью pip, загружает следующий "https://pypi.org/project/enum/". Этот пакет также имеет enum.py, что, вероятно, является причиной ошибки атрибута:

AttributeError: module 'enum' has no attribute '__version__'

Ссылка на страницу PyPI упоминает, что:

Заменено стандартной библиотекой Python.

Python 3 теперь имеет в своей стандартной библиотеке реализацию enum (также доступную для более старых версий Python в качестве стороннего дистрибутива enum34), которая заменяет эту библиотеку.

Я понимаю: поскольку пакет перечисления Python3 заменяет пакет перечисления PyPI, пакет перечисления Python3 следует использовать вместо пакета перечисления PyPI, верно?

Я правильно понимаю? Если да, то как этого добиться? т.е. когда pip пытается загрузить / установить пакет enum, как перенаправить его, чтобы использовать пакет enum Python3 и не использовать пакет enum с помощью PyPI?

Заранее спасибо!!

1 ответ

Питон 3 Enum не является заменой PyPI enum- у них разные API. Если устанавливаемому пакету действительно нужна версия PyPI, то версия stdlib работать не будет.

Другие вопросы по тегам