py2exe: Compilado Python aplicativo do Windows não será executado por causa de DLL

StackOverflow https://stackoverflow.com/questions/1145662

  •  16-09-2019
  •  | 
  •  

Pergunta

Eu vou confessar que eu sou muito novo para Python e eu realmente não sei o que estou fazendo ainda. Recentemente eu criei uma aplicação muito pequena do Windows usando Python 2.6.2 e wxPython 2.8. E ele funciona muito bem; Estou bastante satisfeito com a forma como ele funciona normalmente. Por normalmente eu quero dizer quando eu chamá-lo diretamente através do interpretador Python, assim:

> python myapp.py

No entanto, eu queria ir um passo além e realmente compilar isso em um arquivo executável autônomo. Então eu segui estas instruções do wiki wxPython que utilizam py2exe. No início, me deu erros na linha de comando, dizendo MSVCR90.DLL estava faltando. Então eu copiei MSVCR90.DLL a minha pasta Python \ DLLs. Que parecia à primeira vista como ele fixa-lo, uma vez que fez com sucesso o que precisava fazer. Ele fez terminar com um aviso rápido, que havia arquivos de alguns DLL do programa depende e eu pode ou não pode precisar de distribuí-los.

Então, eu naveguei para a pasta dist que py2exe tinha criado e tentou correr o meu executável. Mas tentando abrir só apareceu um diálogo de erro que dizia:

This application failed to start because MSVCR90.dll was not found.
Re-installing the application may fix this problem.

Então fui em frente e copiado MSVCR90.DLL novamente para esta pasta dist. Mas isso não fazer o truque. Então eu copiei-o no WINDOWS \ system32. Isso não fazê-lo também. O que eu preciso fazer para obter essa coisa de trabalho?

Foi útil?

Solução

Você não pode simplesmente copiar msvcr * .dll - eles precisam ser configurado usando as regras para conjuntos de módulos lado a lado. Você pode fazer isso através da instalação do pacote redistribuível como Sam aponta, ou você pode colocá-los ao lado de seus executáveis ??contanto que você obedecer as regras.

Veja a seção "Implantando Visual C ++ DLLs de biblioteca como conjuntos privados" aqui: Como implantar usando XCopy para detalhes, mas basicamente sua aparência pedido como este:

c:\My App\MyApp.exe
c:\My App\Microsoft.VC90.CRT\Microsoft.VC90.CRT.manifest
c:\My App\Microsoft.VC90.CRT\msvcr90.dll

Uma vantagem disso é que os usuários não-administrador pode usar seu aplicativo (eu acredito que você precisa ser um administrador para instalar o tempo de execução via o instalador redistribuível). E não há necessidade de qualquer instalação -. Você só pode copiar os arquivos para um PC e tudo funciona

Outras dicas

Acredito que a instalação Microsoft C ++ Redistributable Package irá instalar a DLL que você precisa corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top