Подтвердить что ты не робот

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

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

My setup.py выглядит так:

from distutils.core import setup
import py2exe

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

и вывод py2exe выглядит следующим образом:

python setup.py py2exe
running py2exe
creating C:\DevSource\Scripts\ServerManager\build
creating C:\DevSource\Scripts\ServerManager\build\bdist.win32
   ...
   ...
creating C:\DevSource\Scripts\ServerManager\dist
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'wx._misc_' (C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_misc_.pyd -> wx._misc_.pyd)
creating python loader for extension 'lxml.etree' (C:\Python26\lib\site-packages\lxml\etree.pyd -> lxml.etree.pyd)
   ...
   ...
creating python loader for extension 'bz2' (C:\Python26\DLLs\bz2.pyd -> bz2.pyd)
*** finding dlls needed ***

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

python ServerManager.py

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

4b9b3361

Ответ 1

Я обнаружил, что 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 С++ 2008, я рекомендую вам загрузить и установить Microsoft распространяемый распространяемый пакет Microsoft Visual С++ 2008. p >

Ответ 2

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

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

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

Ответ 3

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/

Ответ 4

Похоже, что это только зависимость для 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.

Ответ 5

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.

Ответ 6

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

Microsoft.VC90.CRT.manifest msvcr90.dll

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

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

Ответ 7

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

Ответ 10

В моем win8.1 я не нашел путь

c:/Программные файлы /Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT

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

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

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

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

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

Ответ 11

import sys

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