MemoryLoadError при попытке запустить приложение py2exe - PullRequest
5 голосов
/ 20 января 2010

Я пытаюсь собрать приложение 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 ]

7 голосов
/ 02 ноября 2010

тот же вопрос, что и https://stackoverflow.com/questions/1979486/py2exe-win32api-pyc-importerror-dll-load-failed.

посмотрите на setup.py, только исключите эти dll, которые включены в систему.

 'dll_excludes': [ "mswsock.dll", "powrprof.dll" ]

тебе это поможет!

1 голос
/ 26 февраля 2010

Вы делаете преобразование py2exe на 64-битной / Vista?

Я пишу свой код на vista64bit, а создаваемые мной файлы .exe обычно не работают на 32-битной XP (это две машины, которые у меня под рукой).

.exe услужливо выбрасывает текстовый файл с трассировкой, и кажется, что 64-битные окна используют win32api.dll. Я предполагаю, что это .dll, используемая 64-битными окнами для репликации поведения 32-битной ОС, поэтому я просто беру тот же скрипт и выполняю преобразование на 32-битной XP. Надеюсь, это поможет.

1 голос
/ 26 февраля 2010

Вы можете выполнить проверку DLL и зависимостей вручную. Когда вы генерируете exe-файл, я уверен, что вы заметили, что он распечатывает dll-файлы, которые требуются / используются. Проверьте в системе, где исполняемый файл не работает, существуют ли dll и имеют ли они одинаковую версию.

Еще одна вещь. Вы копируете всю папку dist в систему или просто exe, потому что вам нужна вся папка dist, а не только exe.

0 голосов
/ 02 июля 2016

Только для тех, кто придет сюда в будущем. Если вы используете какую-либо библиотеку 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}})

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

...