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

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


person soapergem    schedule 17.07.2009    source источник
comment
Это дубликат другого вопроса с более полным обсуждением: ‹br/› ‹stackoverflow.com/questions/323424 ›Однажды StackOverflow может мне достаточно доверять, чтобы пометить это как дубликат.   -  person resplin    schedule 15.10.2009


Ответы (2)


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

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

person RichieHindle    schedule 17.07.2009
comment
Это особенность Vista? Я столкнулся с аналогичной проблемой (MSVCP71.DLL сообщил об отсутствии при запуске приложения py2exe) и просто поместил его в тот же каталог, что и .exe, исправил его (по крайней мере, в XP) - person Luper Rouch; 18.07.2009
comment
@Luper: Я считаю, что новые правила появились с msvcr80. - person RichieHindle; 18.07.2009

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

person Sam DeFabbia-Kane    schedule 17.07.2009