MemoryLoadError при попытке запустить приложение py2exe
Я пытаюсь собрать приложение Python, используя py2exe 0.6.9 и Python 2.6.4 в Windows. Хотя исполняемый файл отлично работает в системе, которую я использовал для сборки, он завершается неудачно, когда я пытаюсь запустить его в другой системе:
C:\Documents and Settings\Administrator\Desktop\dist>.\backend.exe install
Traceback (most recent call last):
File "boot_service.py", line 6, in <module>
File "zipextimporter.pyo", line 82, in load_module
File "win32serviceutil.pyo", line 9, in <module>
File "zipextimporter.pyo", line 98, in load_module
ImportError: MemoryLoadLibrary failed loading win32api.pyd
У меня есть сильное предчувствие, что я скучаю по библиотеке, но я не уверен, что именно, тем более что средство проверки зависимостей ничего не помечает как отсутствующее в целевой системе. Как мне поступить?
4 ответа
Тот же вопрос, что и /questions/45745257/py2exe-win32apipyc-oshibka-zagruzki-dll-fajla-importerror.
посмотрите на setup.py, просто исключите эти библиотеки, которые включены в систему.
'dll_excludes': [ "mswsock.dll", "powrprof.dll" ]
это поможет вам!
Вы можете сделать проверку DLL и зависимостей вручную. Когда вы генерируете exe-файл, я уверен, что вы заметили, что он распечатывает dll-файлы, которые требуются / используются. Проверьте в системе, где исполняемый файл не работает, существуют ли dll и имеют ли они одну и ту же версию.
Еще одна вещь. Вы копируете всю папку dist в систему или просто exe, потому что вам нужна вся папка dist, а не только exe.
Вы делаете преобразование py2exe на 64bit/ Vista?
Я пишу свой код на vista64bit, и создаваемые мной файлы.exe обычно не работают на 32-битной XP (это две машины, которые у меня под рукой).
.Exe услужливо выбрасывает текстовый файл с трассировкой, и кажется, что 64-битные окна используют win32api.dll. Я предполагаю, что это.dll, используемая 64-битными окнами для репликации поведения 32-битной ОС, поэтому я просто беру тот же сценарий и выполняю преобразование на 32-битной XP. Надеюсь, это поможет.
Просто для тех, кто придет сюда в будущем. Если вы используете какую-либо библиотеку win32 и застряли с этим типом ошибок, вы можете сделать следующие шаги:
- Проблема заключается в том, что существует конфликт между файлами DLL функций win32 и файлами DLL автоматически py2exe. Таким образом, чтобы решить этот конфликт, вы должны знать, что ваши функции требуют DLL-файлы, а затем исключить эти файлы из параметров настройки
Пример:
Согласно следующему коду:
import win32crypt
win32crypt.CryptUnprotectData(...)
Я использовал функцию CryptUnprotectData, поэтому я искал требуемую dll CryptUnprotectData и нашел следующую информацию, введите описание ссылки здесь, как вы можете видеть,
"Crypt32.dll" требуется.
поэтому я редактирую мой setup.py, чтобы он выглядел так
includes = ["win32crypt"]
dll_excludes=["Crypt32.dll"]
setup(
options = {'py2exe': {'bundle_files': 1, 'compressed': True,'dll_excludes': dll_excludes,'includes': includes}})
и это сработало отлично.