py2exe:Скомпилированное приложение Windows для Python не запускается из-за DLL

StackOverflow https://stackoverflow.com/questions/1145662

  •  16-09-2019
  •  | 
  •  

Вопрос

Признаюсь, я новичок в Python и еще не совсем понимаю, что делаю.Недавно я создал очень маленькое приложение для Windows, используя Python 2.6.2 и wxPython 2.8.И это прекрасно работает;Я вполне доволен тем, насколько хорошо он работает в обычном режиме.Под обычно я имею в виду, когда я вызываю его напрямую через интерпретатор Python, например:

> python myapp.py

Однако я хотел пойти еще дальше и скомпилировать это в отдельный исполняемый файл.Поэтому я последовал эти инструкции из вики wxPython, в которой используется py2exe.Сначала он выдал мне ошибку в командной строке, сообщив, что MSVCR90.dll отсутствует.Затем я скопировал MSVCR90.dll в папку Python\DLLs.На первый взгляд это выглядело так, как будто оно исправило проблему, поскольку оно успешно сделало то, что нужно.Он закончился быстрым предупреждением о том, что существуют некоторые файлы DLL, от которых зависит программа, и мне может потребоваться или не потребоваться их распространение.

Итак, я зашел в папку dist, созданную py2exe, и попытался запустить свой исполняемый файл.Но при попытке открыть его появилось только диалоговое окно с сообщением об ошибке:

This application failed to start because MSVCR90.dll was not found.
Re-installing the application may fix this problem.

Поэтому я пошел дальше и снова скопировал MSVCR90.dll в эту папку dist.Но это не помогло.Затем я скопировал его в каталог WINDOWS\system32.Это тоже не помогло.Что мне нужно сделать, чтобы эта штука заработала?

Это было полезно?

Решение

Просто скопировать msvcr*.dll нельзя — их нужно настроить по правилам для параллельных сборок.Вы можете сделать это, установив распространяемый пакет, как указывает Сэм, или вы можете поместить их вместе со своими исполняемыми файлами, если вы соблюдаете правила.

См. раздел «Развертывание DLL библиотеки Visual C++ как частных сборок» здесь: Как развернуть с помощью XCopy подробнее, но в основном ваше приложение выглядит так:

c:\My App\MyApp.exe
c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest
c:\My App\Microsoft.VC90.CRT\msvcr90.dll

Одним из преимуществ этого является то, что пользователи, не являющиеся администраторами, могут использовать ваше приложение (я считаю, что вам нужно быть администратором, чтобы установить среду выполнения через распространяемый установщик).И никакой установщик не нужен - можно просто скопировать файлы на ПК и все работает.

Другие советы

Я верю, что установка Распространяемый пакет Microsoft C++ правильно установит нужную вам DLL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top