Pergunta

Eu estou usando python 2.6 em XP. Acabo de instalar py2exe, e eu posso criar com êxito um hello.exe simples a partir de um hello.py. No entanto, quando tento usar py2exe no meu programa real, py2exe produz algumas mensagens de informação, mas não consegue gerar qualquer coisa na pasta dist.

Os meus olhares setup.py como este:

from distutils.core import setup
import py2exe

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

e os olhares de saída Py2Exe como este:

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 parece ter encontrado todos os meus importações (embora eu estava um pouco surpreso de ver win32 mencionado, como eu não estou importando-lo explicitamente). Além disso, meu programa inicia-se muito feliz com este comando:

python ServerManager.py

É evidente que eu estou fazendo algo fundamentalmente errado, mas na ausência de quaisquer mensagens de erro de py2exe não tenho idéia o que.

Foi útil?

Solução 2

Eu descobri que py2exe funciona muito bem se eu comentar a parte do meu programa que usa wxPython. Além disso, quando eu uso py2exe na amostra 'simples' que vem com o seu download (isto é, no Python26 \ Lib \ site-packages \ py2exe \ samples \ simples), eu recebo essa mensagem de erro:

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

Então algo sobre wxPython faz py2exe acho que preciso de uma DLL Visual Studio 2008. Eu não tenho VS2008, e ainda assim meu programa funciona perfeitamente bem como um diretório de módulos Python. Eu encontrei uma cópia do msvcp90.dll na web, instalou-lo em Python26 / DLLs e py2exe agora funciona bem.

Eu ainda não entendo onde essa dependência tem vindo, desde que eu posso executar o meu código perfeitamente bem sem py2exe. Também é irritante que py2exe não me deu uma mensagem de erro como o fez com a amostra test_wx.py.

Além disso update: Quando eu tentei executar a saída de py2exe em outro PC, descobri que precisava ter MSVCR90.DLL instalado; por isso, se o seu PC de destino não tem Visual C ++ 2008 já instalado, eu recomendo que você baixar e instalar o Microsoft Visual C ++ 2008 Redistributable Package .

Outras dicas

Eu coloquei isso em todos os meus scripts setup.py:

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

Isso mantém tranquila py2exe, mas você ainda precisa ter certeza de que dll está na máquina do usuário.

wxPython não tem nada a ver com isso. Antes Python 2.6, Python usado Visual Studio 2003 como seu compilador do Windows. Começando com 2.6, eles mudaram para Visual Studio 2008, o que requer um arquivo de manifesto em algumas situações. Este tem sido bem documentada. Veja os links a seguir:

http://wiki.wxpython.org/py2exe

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

Além disso, se você está criando um aplicativo wxPython com py2exe, então você deseja definir o parâmetro janelas, e não a um console. Talvez o meu tutorial irá ajudá-lo:

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

Parece que esta é apenas uma dependência para Python 2.6. Eu não estava recebendo esse erro em 2,5, mas depois da atualização eu sou.

Esta discussão e-mail tem algum fundo de por que existe o problema e como corrigi-lo:
http://www.nabble.com/py2exe, -Py26, -wxPython-and-dll-td20556399.html

Eu não quero ter que instalar o vcredist. Meu aplicativo atualmente exige nenhuma instalação e pode ser executado por não-administradores, que é o comportamento que eu não quero perder. Então eu segui as sugestões nas ligações e tem a Microsoft.VC90.CRT.manifest e msvcr90.dll necessário através da instalação de Python "por apenas este usuário". Eu também precisava msvcp90.dll que eu encontrei nas WinSxS pasta de um "todos os usuários" Python 2.6 instalar. Como eu já tinha dois dos três, eu incluído msvcm90.dll para evitar futuros erros que eu não receber quaisquer erros imediatos quando saí para fora. Eu coloquei o manifesto e os três DLLs nas libs pasta usada pelo meu aplicativo congelado.

O truque que eu tinha a fazer era incluindo uma cópia adicional do manifesto e msvcr90.dll na raiz da minha pasta do aplicativo ao lado por py2exe gerado executável. Esta cópia do DLL é usado para o arranque da aplicação, mas, em seguida, ele aparece apenas olhar na pasta libs.

Esperamos que a descoberta ajuda a alguém para fora.

Além disso, eu tive o mesmo problema com ter py2exe registrar uma mensagem de erro real. Então eu percebi que stderr não estava sendo redirecionado para o meu arquivo de log. Adicionar "> build.log 2> & 1" na linha de comando, onde você invocar py2exe.

import sys

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

Em cada Windows, você pode encontrar o MSVCP90.dll arquivo em algum subdiretório no C:\\WINDOWS\\WinSxS\\

No meu caso, o diretório foi: x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2.

Ir para pesquisa de arquivo C:\\WINDOWS\\WinSxS\\ e usar o Windows para encontrar MSVCP90.dll.

Apenas para sua informação, para mim ele trabalhou para copiar os arquivos

Microsoft.VC90.CRT.manifest msvcr90.dll

para o diretório com o .exe na máquina do usuário (que não tem python ou VC redistribuível instalado).

Obrigado por todas as dicas aqui!

A saída diz que você está usando WX. Tente executar py2exe com o script especificado como um aplicativo GUI em vez de console. Se não estou enganado, que tende a causar problemas com py2exe.

Tente isto: http://www.py2exe.org/index.cgi/Tutorial # Step52

Ela trabalhou para mim

Há algumas informações sobre o wiki wxPython.

Implantar um Python aplicativo

py2exe com wxPython e Python 2.6

No meu win8.1, eu não encontrar o caminho

c: / Program Files / Microsoft Visual Studio 9.0 / VC / redist / x86 / Microsoft.VC90.CRT

Ao contrário, a dll é encontrado em

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

O XXX pode variar de acordo com o seu PC

Você pode pesquisar no caminho, em seguida, adicione o caminho em que você 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')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top