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 ответов:
Я положил это во все мои 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.
на моем 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')