#python #python-3.x #pyinstaller #apscheduler #pytz
#питон #python-3.x #pyinstaller #апшедулер #пыц
Вопрос:
При запуске моего exe-файла, который я создал с помощью pyinstaller, я каждый раз получаю ошибку при использовании APScheduler в программе.
pkg_resources.DistributionNotFound: The 'pytz-deprecation-shim' distribution was not found and is required by tzlocal
У меня уже была аналогичная проблема с дистрибутивами: pytz, tzlocal и six, которые, похоже, использует APScheduler, но я мог бы исправить это, создав hook-pytz.py
hook-tzlocal.py
hook-six.py
файл, каждый из которых содержит следующий код с соответствующим дистрибутивом:
from PyInstaller.utils.hooks import copy_metadata, collect_data_files datas = copy_metadata('pytz') datas = collect_data_files('pytz')
При создании приложения с помощью pyinstaller я затем вызываю --additional-hooks-dir=
Однако теперь та же процедура не работает для прокладки pytz-deprecation, так как я всегда получаю одну и ту же ошибку. Как я могу решить эту проблему? Я уже пытался обновить все эти пакеты до последней версии, но они, похоже, обновлены.
версии: pytz 2021.3, pytz-устаревшая прокладка 0.1.0.post0, tzlocal 4.1, шесть 1.16.0, APScheduler 3.8.1
Комментарии:
1. Версия APScheduler-3.8.1
Ответ №1:
Я также столкнулся с этой проблемой сегодня.
Мое решение-использовать APScheduler 3.6.3.
Это мой hook-apscheduler.py
datas = copy_metadata('apscheduler', recursive=True) hiddenimports = collect_submodules('apscheduler')
Комментарии:
1. Привет, спасибо, что сработало для меня. Однако, как вы могли бы справиться с проблемой tzdata? Без вставки кода —collect-all tzdata в мою команду pyinstaller программа снова выйдет из строя. Если я это сделаю, все будет работать нормально, но тогда .exe, очевидно, всегда использует часовой пояс, который есть на моем устройстве, но не один из всех других пользователей, если я его распространяю. Есть ли какое-нибудь решение для этого?
2. Во — первых, команда-собрать-все tzdata имеет тот же эффект, что и создание hook-tzdata.py. Во-вторых, рекомендуется использовать команду —additional-hooks-dir для указания нескольких пакетов в папке, аналогично hook-tzdata.py, потому что это может указывать несколько пакетов, в то время как, — collect all может указывать только один пакет. В-третьих, как указать часовой пояс, вы можете сделать это:
3. из tzlocal импорт get_localzone
4. local_tz = get_localzone()
5. планировщик = BackgroundScheduler(часовой пояс=local_tz)