Domanda

Sto usando Python 2.6 su XP. Ho appena installato py2exe e posso creare con successo un semplice hello.exe da un hello.py. Tuttavia, quando provo ad usare py2exe sul mio programma reale, py2exe produce alcuni messaggi informativi ma non riesce a generare nulla nella cartella dist.

Il mio setup.py si presenta così:

from distutils.core import setup
import py2exe

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

e l'output di py2exe è simile al seguente:

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 sembra aver trovato tutte le mie importazioni (anche se sono stato un po 'sorpreso di vedere menzionato win32, dato che non lo sto importando esplicitamente). Inoltre, il mio programma si avvia abbastanza felicemente con questo comando:

python ServerManager.py

Chiaramente sto facendo qualcosa di fondamentalmente sbagliato, ma in assenza di messaggi di errore da py2exe non ho idea di cosa.

È stato utile?

Soluzione 2

Ho scoperto che py2exe funziona bene se commento la parte del mio programma che usa wxPython. Inoltre, quando uso py2exe sull'esempio "semplice" fornito con il suo download (ovvero in Python26 \ Lib \ site-pacchetti \ py2exe \ samples \ simple), viene visualizzato questo messaggio di errore:

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

Quindi qualcosa su wxPython fa pensare a py2exe che ho bisogno di una DLL di Visual Studio 2008. Non ho VS2008, eppure il mio programma funziona perfettamente come una directory di moduli Python. Ho trovato una copia di MSVCP90.DLL sul web, l'ho installata in Python26 / DLL e ora py2exe funziona bene.

Non riesco ancora a capire da dove provenga questa dipendenza, dato che posso eseguire il mio codice perfettamente bene senza py2exe. È anche fastidioso che py2exe non mi abbia dato un messaggio di errore come ha fatto con l'esempio test_wx.py.

Ulteriore aggiornamento: quando ho provato a eseguire l'output di py2exe su un altro PC, ho scoperto che era necessario installare MSVCR90.DLL; quindi se il tuo PC di destinazione non ha già installato Visual C ++ 2008, ti consiglio di scaricare e installare Pacchetto ridistribuibile di Microsoft Visual C ++ 2008 .

Altri suggerimenti

L'ho inserito in tutti i miei script setup.py:

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

Ciò mantiene silenzioso py2exe, ma è comunque necessario assicurarsi che la dll sia sul computer dell'utente.

wxPython non ha nulla a che fare con esso. Prima di Python 2.6, Python utilizzava Visual Studio 2003 come compilatore di Windows. A partire dalla 2.6, sono passati a Visual Studio 2008, che in alcune situazioni richiede un file manifest. Questo è stato ben documentato. Vedi i seguenti link:

http://wiki.wxpython.org/py2exe

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

Inoltre, se stai creando un'applicazione wxPython con py2exe, allora vuoi impostare il parametro windows, NON quello della console. Forse il mio tutorial ti aiuterà:

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

Sembra che questa sia solo una dipendenza per Python 2.6. Non ho riscontrato questo errore sotto la 2.5, ma dopo l'aggiornamento lo sono.

Questo thread di posta elettronica ha alcuni retroscena del perché il problema esiste e di come risolverlo:
http://www.nabble.com/py2exe, -Py26, -wxPython-e-dll-td20556399.html

Non volevo installare il vcredist. La mia applicazione al momento non richiede installazione e può essere eseguita da non amministratori, che è un comportamento che non voglio perdere. Quindi ho seguito i suggerimenti nei collegamenti e ho ottenuto i necessari Microsoft.VC90.CRT.manifest e msvcr90.dll installando Python "solo per questo utente". Avevo anche bisogno di msvcp90.dll che ho trovato nella cartella WinSxS di un " tutti gli utenti " Installazione di Python 2.6. Dato che avevo già due dei tre, ho incluso msvcm90.dll per prevenire errori futuri anche se non ho riscontrato alcun errore immediato quando l'ho lasciato fuori. Ho messo manifest e le tre DLL nella cartella libs usata dalla mia applicazione congelata.

Il trucco che ho dovuto eseguire era includere una copia aggiuntiva del manifest e msvcr90.dll nella radice della cartella della mia applicazione accanto all'eseguibile generato da py2exe. Questa copia della DLL viene utilizzata per avviare l'applicazione, ma poi sembra cercare solo nella cartella libs.

Speriamo che questa scoperta aiuti qualcun altro.

Inoltre, ho avuto lo stesso problema con avere py2exe che registrava un vero messaggio di errore. Poi ho capito che stderr non veniva reindirizzato nel mio file di registro. Aggiungi " > build.log 2 > & amp; 1 " nella riga di comando in cui si richiama py2exe.

import sys

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

Su ogni Windows, puoi trovare il file MSVCP90.dll in qualche sottodirectory in C: \\ WINDOWS \\ WinSxS \\

Nel mio caso, la directory era: x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2 .

Vai a C: \\ WINDOWS \\ WinSxS \\ e usa la ricerca di file di Windows per trovare MSVCP90.dll .

Solo per tua informazione, per me ha funzionato per copiare i file

Microsoft.VC90.CRT.manifest msvcr90.dll

nella directory con .exe sul computer dell'utente (su cui non è installato ridistribuibile python o VC).

Grazie per tutti i suggerimenti qui!

L'output dice che stai usando WX. Prova a eseguire py2exe con lo script specificato come app GUI anziché come console. Se non sbaglio, ciò tende a causare problemi con py2exe.

Prova questo: http://www.py2exe.org/index.cgi/Tutorial # Step52

Ha funzionato per me

Ci sono alcune informazioni sul wiki di wxPython.

Distribuisci un'app Python

py2exe con wxPython e Python 2.6

Sulla mia Win 8.1, non trovo il percorso

  

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

Al contrario, la dll si trova in

  

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

Il XXX può variare in base al tuo PC

Puoi cercare nel percorso, quindi aggiungere il percorso in 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')
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top