Если вы уже пытались собирать какие-либо Python скрипты, использующие PyWin32, в один единственный .exe файл при помощи Py2Exe, то, вероятно, вы сталкивались с тем, что при запуске ваше приложение выбрасывает вот такое исключение:
ImportError: MemoryLoadLibrary failed loading win32api.pyd
Возможно, в поисках решения этой проблемы вы даже набрели на соответствующий баг в багтрекере Py2Exe. Но разработчики хранят молчание, и решения проблемы там нет.
На самом деле, побороть эту неприятность можно, причем не особо напрягаясь. Более того, побороть ее можно двумя способами.
Способ первый. Популярный
Отказаться от мысли собирать скрипты в один exe файл, и, соответственно, использовать опцию "bundle_files": 3 вместо "bundle_files": 1. При этом сборка будет замечательно работать, но ее вид оставляет желать лучшего, ибо при одном только взгляде на количество файлов в ней, начинаешь задумываться, что лучше уж попросить конечного пользователя поставить Python.
Способ второй. Правильный
Все же попытаться собрать приложение в один единственный файл, но при этом исключить из сборки библиотеки mswsock.dll, powrprof.dll, поскольку они уже присутствуют в Windows, и именно при обращении к ним возникает упомянутая выше ошибка. Это можно сделать добавив в словарь конфигурации Py2Exe опцию "dll_excludes", т.е. setup.py должен выглядеть приблизительно так:
- ...
- setup( options = {
- "py2exe":
- {
- "compressed": 1,
- "optimize": 2,
- "bundle_files": 1,
- "dll_excludes": [ "mswsock.dll", "powrprof.dll" ]
- }
- },
- zipfile = None,
- ...
После этого ваше приложение должно запуститься без всяких проблем.










- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии и скачивать файлы


Статьия отличная, пишите ещё
Статьия отличная, пишите ещё и побольше!