py2exe + pywin32 MemoryLoadLibrary импорт не удается, когда bundle_files = 1 - PullRequest
6 голосов
/ 30 июля 2010

Я создал простую программу, которая использует pywin32. Я хочу развернуть его как исполняемый файл, поэтому я сделал его py2exe. Я также не хотел большого количества файлов, поэтому я установил 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?

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

Ответы [ 4 ]

1 голос
/ 09 ноября 2013

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

1 голос
/ 30 июля 2010

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

0 голосов
/ 15 ноября 2013

У меня та же проблема при попытке связать 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 может быть указан или может быть None, я все еще получаю проблему.

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

Я скопировал все dll, найденные в Python27, в тот же каталог, что и исполняемый файл, и добавил этот путь к os.environ ['path«].Это не сработало.

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

Я заменил весь 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, чтобы посмотреть, работает ли он.Если это так, вы всегда можете сделать свой единственный исполняемый файл записать необходимый модуль во временный каталог и добавить его в свой путь.Если нет, я чувствую, что эту проблему будет трудно решить.

0 голосов
/ 13 ноября 2013

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

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

...