Как использовать 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 работать не будет.