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}})

и это сработало отлично.

Другие вопросы по тегам