py2exe не удается генерировать исполняемый файл

51
задан Erik Allik 7 October 2012 в 00:20
поделиться

6 ответов

Я обнаружил, что py2exe работает просто великолепно, если я комментирую часть своей программы, которая использует wxPython. Кроме того, когда я использую py2exe на 'простом' образце, который идет с его загрузкой (т.е. в Python26\Lib\site-packages\py2exe\samples\simple), я получаю это сообщение об ошибке:

*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory

, Таким образом, что-то о wxPython заставляет py2exe думать, что мне нужен DLL Visual Studio 2008. У меня нет VS2008 и все же моих работ программы отлично как каталог модулей Python. Я нашел копию MSVCP90.DLL в сети, установил его в Python26/DLLs, и py2exe теперь хорошо работает.

я все еще не понимаю, куда эта зависимость прибыла из, так как я могу выполнить свой код отлично хорошо без py2exe. Это является также раздражающим, который py2exe не дал мне, сообщение об ошибке как он сделало с test_wx.py образцом.

Дальнейшее обновление: Когда я пытался выполнить вывод от py2exe на другом ПК, я обнаружил, что этому нужно было установить MSVCR90.DLL; таким образом, если Ваш целевой ПК не имеет Visual C++ 2008, уже установленный, я рекомендую, чтобы Вы загрузили и установили Microsoft Visual C++ Распространяемый Пакет 2008 года .

40
ответ дан tovmeod 7 November 2019 в 10:04
поделиться

Вывод говорит использование WX. Попытайтесь выполнить py2exe со своим сценарием, определенным как приложение для GUI вместо консоли. Если я не ошибаюсь, который имеет тенденцию вызывать проблемы с py2exe.

1
ответ дан 7 November 2019 в 10:04
поделиться

Я включил это во все свои сценарии setup.py:

distutils.core.setup(
    options = {
        "py2exe": {
            "dll_excludes": ["MSVCP90.dll"]
        }
    },
    ...
)

Это хранит py2exe тихо, но вам все равно нужно убедиться, что dll находится на компьютере пользователя.

41
ответ дан 7 November 2019 в 10:04
поделиться
import sys

sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')
-2
ответ дан 7 November 2019 в 10:04
поделиться

Похоже, это зависимость только для Python 2.6. Я не получал эту ошибку в версии 2.5, но после обновления я получаю.

В этой цепочке писем рассказывается, почему существует проблема и как ее исправить:
http://www.nabble.com/ py2exe, -Py26, -wxPython-and-dll-td20556399.html

Мне не хотелось устанавливать vcredist. Мое приложение в настоящее время не требует установки и может быть запущено не администраторами, и я не хочу терять такое поведение. Поэтому я последовал рекомендациям в ссылках и получил необходимые Microsoft.VC90.CRT.manifest и msvcr90.dll, установив Python «только для этого пользователя». Мне также понадобился файл msvcp90.dll, который я нашел в папке WinSxS установки Python 2.6 для всех пользователей. Поскольку у меня уже было два из трех, я включил msvcm90. dll, чтобы предотвратить будущие ошибки, хотя я не получал никаких немедленных ошибок, когда оставил его. Я поместил манифест и три библиотеки DLL в папку libs, используемую моим замороженным приложением.

Трюк, который мне пришлось выполнить, заключался в том, чтобы добавить дополнительную копию манифеста и msvcr90.dll в корень папки моего приложения рядом с py2exe. сгенерированный исполняемый файл. Эта копия DLL используется для начальной загрузки приложения, но тогда кажется, что она просматривает только папку libs.

Надеюсь, что это открытие поможет кому-то еще.

Кроме того, у меня была такая же проблема, когда py2exe регистрировал файл. реальное сообщение об ошибке. Затем я понял, что stderr не перенаправляется в мой файл журнала. Добавьте "> build.log 2> & 1" в командную строку, в которой вы вызываете py2exe.

Я поместил манифест и три библиотеки DLL в папку libs, используемую моим замороженным приложением.

Трюк, который мне пришлось выполнить, заключался в том, чтобы добавить дополнительную копию манифеста и msvcr90.dll в корень папки моего приложения рядом с py2exe. сгенерированный исполняемый файл. Эта копия DLL используется для начальной загрузки приложения, но тогда кажется, что она просматривает только папку libs.

Надеюсь, что это открытие поможет кому-то другому.

Кроме того, у меня была такая же проблема с записью py2exe в журнал. реальное сообщение об ошибке. Затем я понял, что stderr не перенаправляется в мой файл журнала. Добавьте "> build.log 2> & 1" в командную строку, в которой вы вызываете py2exe.

Я поместил манифест и три библиотеки DLL в папку libs, используемую моим замороженным приложением.

Трюк, который мне пришлось выполнить, заключался в том, чтобы добавить дополнительную копию манифеста и msvcr90.dll в корень папки моего приложения рядом с py2exe. сгенерированный исполняемый файл. Эта копия DLL используется для начальной загрузки приложения, но тогда кажется, что она просматривает только папку libs.

Надеюсь, что это открытие поможет кому-то другому.

Кроме того, у меня была такая же проблема с записью py2exe в журнал. реальное сообщение об ошибке. Затем я понял, что stderr не перенаправляется в мой файл журнала. Добавьте "> build.log 2> & 1" в командную строку, в которой вы вызываете py2exe.

dll в корне папки моего приложения рядом с исполняемым файлом, созданным py2exe. Эта копия DLL используется для начальной загрузки приложения, но тогда кажется, что она просматривает только папку libs.

Надеюсь, что это открытие поможет кому-то другому.

Кроме того, у меня была такая же проблема с записью py2exe в журнал. реальное сообщение об ошибке. Затем я понял, что stderr не перенаправляется в мой файл журнала. Добавьте "> build.log 2> & 1" в командную строку, в которой вы вызываете py2exe.

dll в корне папки моего приложения рядом с исполняемым файлом, созданным py2exe. Эта копия DLL используется для начальной загрузки приложения, но тогда кажется, что она просматривает только папку libs.

Надеюсь, что это открытие поможет кому-то другому.

Кроме того, у меня была такая же проблема с записью py2exe в журнал. реальное сообщение об ошибке. Затем я понял, что stderr не перенаправляется в мой файл журнала. Добавьте "> build.log 2> & 1" в командную строку, в которой вы вызываете py2exe.

t перенаправляется в мой файл журнала. Добавьте "> build.log 2> & 1" в командную строку, в которой вы вызываете py2exe.

t перенаправляется в мой файл журнала. Добавьте "> build.log 2> & 1" в командную строку, в которой вы вызываете py2exe.

6
ответ дан 7 November 2019 в 10:04
поделиться

Просто для вашей информации, для меня это сработало, чтобы скопировать файлы

Microsoft.VC90 .CRT.manifest msvcr90.dll

в каталог с .exe на компьютере пользователя (у которого не установлен распространяемый пакет Python или VC).

Спасибо за все подсказки!

3
ответ дан 7 November 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: