py2exe: скомпилированное приложение Python для Windows не запускается из-за DLL - PullRequest
6 голосов
/ 18 июля 2009

Признаюсь, я очень плохо знаком с 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. Это тоже не делало. Что мне нужно сделать, чтобы заставить эту вещь работать?

Ответы [ 2 ]

8 голосов
/ 18 июля 2009

Вы не можете просто скопировать 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

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

2 голосов
/ 18 июля 2009

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

...