Ошибка при использовании python 3.8 exchangelib в kivymd на Android

#kivy #buildozer #kivymd #exchangelib

#kivy #buildozer #kivymd #exchangelib

Вопрос:

Я использую exchangelib для доступа к моей почте в exchange из kivymd на python. Когда я запускаю свой код на компьютере, он работает без проблем. Но, когда я развертываю его через buildozer на Android и запускаю свое приложение на Android, я вижу ошибку решателя. Пожалуйста, помогите, я не понимаю источник проблемы.

 11-15 13:11:05.087 21267 22545 I python  :  Traceback (most recent call last):
11-15 13:11:05.087 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/cached_property.py", line 70, in __get__
11-15 13:11:05.089 21267 22545 I python  :  KeyError: 'resolver'
11-15 13:11:05.089 21267 22545 I python  :  
11-15 13:11:05.089 21267 22545 I python  :  During handling of the above exception, another exception occurred:
11-15 13:11:05.089 21267 22545 I python  :  
11-15 13:11:05.089 21267 22545 I python  :  Traceback (most recent call last):
11-15 13:11:05.090 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/dns/resolver.py", line 743, in read_resolv_conf
11-15 13:11:05.090 21267 22545 I python  :  FileNotFoundError: [Errno 2] No such file or directory: '/etc/resolv.conf'
11-15 13:11:05.091 21267 22545 I python  :  
11-15 13:11:05.091 21267 22545 I python  :  During handling of the above exception, another exception occurred:
11-15 13:11:05.091 21267 22545 I python  :  
11-15 13:11:05.091 21267 22545 I python  :  Traceback (most recent call last):
11-15 13:11:05.092 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/app/main.py", line 155, in <module>
11-15 13:11:05.092 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/app/main.py", line 151, in main
11-15 13:11:05.093 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/kivy/app.py", line 854, in run
11-15 13:11:05.094 21267 22545 I python  :    File "kivy/_event.pyx", line 707, in kivy._event.EventDispatcher.dispatch
11-15 13:11:05.094 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/app/main.py", line 63, in on_start
11-15 13:11:05.095 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/app/main.py", line 108, in get_mail
11-15 13:11:05.095 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/exchangelib/account.py", line 116, in __init__
11-15 13:11:05.096 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/exchangelib/autodiscover/discovery.py", line 24, in discover
11-15 13:11:05.097 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/exchangelib/autodiscover/discovery.py", line 123, in discover
11-15 13:11:05.097 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/exchangelib/autodiscover/discovery.py", line 429, in _step_1
11-15 13:11:05.098 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/exchangelib/autodiscover/discovery.py", line 338, in _attempt_response
11-15 13:11:05.099 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/exchangelib/autodiscover/discovery.py", line 255, in _get_unauthenticated_response
11-15 13:11:05.099 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/exchangelib/autodiscover/discovery.py", line 379, in _is_valid_hostname
11-15 13:11:05.100 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/cached_property.py", line 74, in __get__
11-15 13:11:05.100 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/exchangelib/autodiscover/discovery.py", line 154, in resolver
11-15 13:11:05.101 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/dns/resolver.py", line 695, in __init__
11-15 13:11:05.101 21267 22545 I python  :    File "/home/andrey/PycharmProjects/stats_delay_android/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/stats_delay_android/dns/resolver.py", line 746, in read_resolv_conf
11-15 13:11:05.102 21267 22545 I python  :  dns.resolver.NoResolverConfiguration: None
11-15 13:11:05.102 21267 22545 I python  : Python for android ended.
  

Ответ №1:

exchangelib необходимо выполнить поиск DNS для автоматического обнаружения для работы. NoResolverConfiguration это исключение из dnspython пакета, сообщающее вам, что в вашей системе не удалось найти никакой информации о том, с какими серверами имен обращаться. Обычно это должно быть расположено в /etc/resolv.conf , как указывает FileNotFoundError ошибка.

Я не знаю, как работает DNS на Android, или как Python может получить доступ к конфигурации DNS на Android. Если вы не можете заставить dnspython выбрать конфигурацию, вы можете вручную задать список DNS-серверов, которые вы хотите использовать (например [8.8.8.8] ) в атрибуте Resolver.nameservers . Вы можете настроить это в exchangelib с помощью атрибута Autodiscovery.DNS_RESOLVER_ATTRS:

 from exchangelib.auto discover import Autodiscovery

Autodiscovery.DNS_RESOLVER_ATTRS['nameservers'] = ['8.8.8.8']