Ошибка импорта APScheduler при генерации исполняемого файла с py2exe или cx_freeze

При генерации исполняемого файла на python 2.7 с использованием py2exe (0.6.9) или cx_freeze (5.0.1) с APScheduler (3.3.1) это дает мне следующую ошибку:

File "apscheduler\__init__.pyc", line 2, in <module> File "pkg_resources\__init__.pyc", line 552, in get_distribution File "pkg_resources\__init__.pyc", line 426, in get_provider File "pkg_resources\__init__.pyc", line 968, in require File "pkg_resources\__init__.pyc", line 854, in resolve pkg_resources.DistributionNotFound: The 'APScheduler' distribution was not found and is required by the application 

Это мой файл setup.py cx_freeze :

 import sys from cx_Freeze import setup, Executable # Dependencies are automatically detected, but it might need fine tuning. build_exe_options = {"includes": ["requests", "apscheduler"], "include_files": ["XXX"]} # GUI applications require a different base on Windows (the default is for a # console application). base = None if sys.platform == "win32": base = "Win32GUI" setup( name = "XXX", version = "XXX", description = "XXX", options = {"build_exe": build_exe_options}, executables = [Executable("XXX.py", base=base), Executable("XXX2.py", base=base)]) 

И это мой файл setup.py py2exe :

 from distutils.core import setup import py2exe data_files = ['XXX'] setup( data_files=data_files, windows=[ {'script': 'XXX.py'}, {'script': 'XXX2.py'}, ], options={'py2exe':{ 'includes': ['requests', 'apscheduler'], 'bundle_files': 1, } }, ) 

Я уже пытался использовать опцию «пакеты», но без успеха.

Если я удалю код из APScheduler __init__.py (apscheduler / __ init__.py), он будет работать.

Ниже представлен пакет __init__.py из пакета APScheduler:

 # These will be removed in APScheduler 4.0. release = __import__('pkg_resources').get_distribution('apscheduler').version.split('-')[0] version_info = tuple(int(x) if x.isdigit() else x for x in release.split('.')) version = __version__ = '.'.join(str(x) for x in version_info[:3]) 

Нужно ли каким-либо образом включать зависимости в пакет библиотек py2exe / cx_freeze?

Я уже проводил некоторые исследования в Интернете, но без успеха.

One Solution collect form web for “Ошибка импорта APScheduler при генерации исполняемого файла с py2exe или cx_freeze”

Нашел решение. Проблема заключалась в том, что файл py2exe не включал каталог dist-info в library.zip. Каждый модуль имеет свой собственный каталог dist-info в библиотеках python-пакетов сайта.

Эти каталоги используются библиотеками pkg_resources для импорта модулей, как мы можем видеть на apstcheduler __init__.py:

Все, что вам нужно сделать, это добавить эти каталоги dist-info в файл library.zip, сгенерированный py2exe.

Ниже приведен пример из google, импортирующего (non-related, но можно использовать в качестве примера) zoneinfo каталог library.zip.

https://github.com/google/transitfeed/blob/master/setup.py#L96

Чтобы получить путь dist-info модуля, используйте следующую команду:

 import os import pkg_resources dist_info_dir = pkg_resources.get_distribution('desired_module')._provider.egg_info # get base name of directory base_name = os.path.basename(dist_info_dir) 

Примечание. Если вместо этого нет каталога dist-info и информации о яйце. Вы, вероятно, должны искать пакет колес для библиотеки или создавать себя с помощью:

 python setup.py bdist_wheel 

Ура!

  • Относительная ошибка импорта с py2exe
  • Запуск скомпилированного python (py2exe) в качестве администратора в Vista
  • Можно ли свободно распространять распространяемый пакет Microsoft Visual C ++ 2008
  • PySide "hello world": py2exe / pyinstaller / cx_freeze и нарушение прав доступа
  • ImportError: нет модуля с именем py2exe
  • python NameError: name '__file__' не определен
  • python lxml с py2exe
  • Как я могу создать py2exe без ошибок?
  • Создание файла .exe Python: ошибка ошибки py2exe
  • Как исправить TCL_LIBRARY и TK_LIBRARY с py2exe
  • py2exe не может импортировать модуль из другого каталога
  •  
    Interesting Posts for Van-Lav

    динамический метод создания и декоратор, полученный объект «functools.partial» ошибки не имеет атрибута «__module__»

    Травление переименования, выставленное Boost.Python

    Как писать русские символы в файле?

    Как установить шрифт pygame

    Как я могу вызвать ошибку 500 в Django?

    Преобразование HTML в PDF с помощью Python

    Можно ли полагаться на порядок оценки условий в операторах if?

    Python vs C # /. NET – каковы основные отличия, которые следует учитывать при использовании одного для разработки большого веб-приложения?

    Python UnicodeDecodeError: кодек 'ascii' не может декодировать байт 0xe2 порядковый номер не в диапазоне (128)

    Искать словарь Python, где значение указано

    Как изменить соглашения о конце строки?

    Как найти путь к файлу сертификата SSL?

    Python: количество символов в текстовом файле

    Статистическое масштабирование автокорреляции с использованием numpy.fft

    Преобразование текстовой таблицы в pandas dataframe

    Python - лучший язык программирования в мире.