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


Я использую python 2.6 на XP. Я только что установил py2exe, и я могу успешно создать простой привет.exe от a hello.py. однако, когда я пытаюсь использовать py2exe на моей реальной программе, py2exe производит несколько информационных сообщений, но не может генерировать что-либо в папке dist.

мой setup.py выглядит так:

from distutils.core import setup
import py2exe

setup(console=['ServerManager.py'])

и вывод py2exe выглядит так:

python setup.py py2exe
running py2exe
creating C:DevSourceScriptsServerManagerbuild
creating C:DevSourceScriptsServerManagerbuildbdist.win32
   ...
   ...
creating C:DevSourceScriptsServerManagerdist
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'wx._misc_' (C:Python26libsite-packageswx-2.8-msw-unicodewx_misc_.pyd -> wx._misc_.pyd)
creating python loader for extension 'lxml.etree' (C:Python26libsite-packageslxmletree.pyd -> lxml.etree.pyd)
   ...
   ...
creating python loader for extension 'bz2' (C:Python26DLLsbz2.pyd -> bz2.pyd)
*** finding dlls needed ***

py2exe, кажется, нашел все мои импорт (хотя я был немного удивлен чтобы увидеть упомянутый win32, поскольку я явно не импортирую его). Кроме того, моя программа запускается довольно счастливо с этой командой:

python ServerManager.py

очевидно, что я делаю что-то принципиально неправильно, но в отсутствие каких-либо сообщений об ошибках от py2exe я понятия не имею, что.

11 51

11 ответов:

Я положил это во все мои setup.py скрипты:

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

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

Я обнаружил, что 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 / DLL, и py2exe теперь работает нормально.

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

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

wxPython не имеет к этому никакого отношения. До Python 2.6 Python использовал Visual Studio 2003 в качестве компилятора Windows. Начиная с версии 2.6, они перешли на Visual Studio 2008, для которой в некоторых ситуациях требуется файл манифеста. Это было хорошо задокументировано. Смотрите следующие ссылки:

http://wiki.wxpython.org/py2exe

http://py2exe.org/index.cgi/Tutorial#Step52

кроме того, если вы создаете приложение wxPython с помощью py2exe, тогда вы хотите установить параметр windows, а не консольный. Может быть, мой учебник поможет вам:

http://www.blog.pythonlibrary.org/2010/07/31/a-py2exe-tutorial-build-a-binary-series/

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

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

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

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

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

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

import sys

sys.path.append('C:\WINDOWS\WinSxS\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2')

на каждом Windows, вы можете найти файл MSVCP90.dll в некотором подкаталоге в C:\WINDOWS\WinSxS\

в моем случае, каталог: x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2.

на C:\WINDOWS\WinSxS\ и использовать поиск файлов windows, чтобы найти MSVCP90.dll.

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

Microsoft.VC90.CRT.manifest msvcr90.dll

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

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

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

попробуйте это:http://www.py2exe.org/index.cgi/Tutorial#Step52

Это сработало для меня

есть некоторая информация о wxPython wiki.

развертывание приложения Python

py2exe с wxPython и Python 2.6

на моем win8. 1, я не нахожу путь

c:/Program файлы / Microsoft Visual Studio 9.0 / VC / redist / x86 / Microsoft.VC90.CRT

наоборот, dll находится в

C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX

XXX может отличаться в зависимости от вашего ПК

вы можете искать в пути , а затем добавить путь в вас setup.py

import sys
sys.path.append('C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX')
import sys

sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')