2010-07-30 4 views
6

Я создал простую программу, которая использует pywin32. Я хочу развернуть его как исполняемый файл, так что я его проиграл. Я также не хотел огромного количества файлов, поэтому я установил bundle_files в 1 (что означает объединение всего вместе). Однако, когда я пытаюсь запустить его, я получаю:py2exe + pywin32 Ошибка памятиLoadLibrary при запуске bundle_files = 1

Traceback (most recent call last): 
    File "pshelper.py", line 4, in <module> 
    File "zipextimporter.pyc", line 82, in load_module 
    File "win32.pyc", line 8, in <module> 
    File "zipextimporter.pyc", line 98, in load_module 
ImportError: MemoryLoadLibrary failed loading win32ui.pyd 

В моих настройках сценария, я пытался делать packages=["win32ui"] и includes=["win32ui"] как варианты, но это не помогло. Как я могу заставить py2exe включить win32ui.pyd?

У меня нет этой проблемы, если я не прошу ее связывать файлы, поэтому я могу это сделать, но я хотел бы знать, как заставить ее работать должным образом.

+0

Обратите внимание, что выполнение '' dll_excludes ': ["mswsock.dll", "powrprof.dll"] ', как предложено в некоторых других ответах, не решает проблему. – Claudiu

ответ

1

Обход, который до сих пор работал лучше всего, - это просто повторить реализацию функций pywin32 с использованием ctypes. Это не требует другого файла .pyd или .dll, чтобы проблема была устранена.

1

Уверены, что проблема в том, что win32ui.pyd не входит в комплект поставки? Трассировка стека не совсем то же самое, что указано в вики, но проверьте это: http://www.py2exe.org/index.cgi/Py2exeAndWin32ui.

+0

Я думаю, что это так, потому что я получаю ошибку загрузки DLL, когда я не пытаюсь связывать файлы. это, похоже, проблема с комплектом. – Claudiu

+0

py2exe не будет связывать внешние библиотеки DLL в архиве или исполняемом файле. Попробуйте разбить файлы MFC в каталог, содержащий exe, и посмотреть, работает ли он. В качестве побочного примечания - если у вас нет zipfile = None, вы можете разархивировать архив, чтобы узнать, оправданы или нет подозрения в том, что win32ui.pyd не входит в комплект. –

+0

.pyd файлы не являются внешними DLL-файлами. Кажется, они включают их в файл exe, но они не загружаются должным образом. – Claudiu

0

Обязательно попробуйте PyInstaller? Я использовал его как в Windows 7, так и в Ubuntu 10.04, и он работал как магия, даже когда я скомпилирован в .pyd в Windows.

Я смог собрать все виды приложений, которые я разработал с ним.

-1

У меня такая же проблема, пытаясь связать psutil с py2exe. Вот что я нашел до сих пор.

Traceback (most recent call last): 
    File "wx_gui.py", line 43, in <module> 
    File "zipextimporter.pyc", line 82, in load_module 
    File "psutil\__init__.pyc", line 85, in <module> 
    File "zipextimporter.pyc", line 82, in load_module 
    File "psutil\_psmswindows.pyc", line 15, in <module> 
    File "zipextimporter.pyc", line 98, in load_module 
ImportError: MemoryLoadLibrary failed loading _psutil_mswindows.pyd 

Я получаю отслеживающий когда bundle_files = 3. ZipFile может быть определено или не может быть Нет, я все еще получаю проблему.

Во-первых, я думал, что это длл отсутствует из-за этой страницы: http://www.py2exe.org/index.cgi/ProblemsToBeFixed

Я скопировал все библиотеки DLL я нашел в python27 в том же каталоге, что и исполняемый и добавил, что путь к каталогу зева. окружать [ 'путь']. Это не сработало.

Затем я попытался импортировать свой пакет непосредственно из пакетов сайта.

Я заменил всю sys.path моего скомпилированный исполняемый файл с моим нормальным sys.path

sys.path = [r'C: \ python27 \ Lib \ idlelib», ...]

Я думаю, что модуль .pyd был импортирован, но Visual C++ бросил мне это сообщение действительно уродливые ошибки:

Runtime Error! 
Program: {path}.exe 
This application has requested the Runtime to terminate it in an unusual way. 
Please contact the application's support team for more information. 

Я предлагаю вам попробовать заменить весь sys.path, чтобы увидеть, если он работает. Если это так, вы всегда можете сделать свой единственный исполняемый файл необходимым для ввода необходимого модуля во временный каталог и добавить его на свой путь. Если нет, я чувствую, что эта проблема будет трудно решить.

Смежные вопросы