2013-03-18 19 views
6

Sto provando a creare un exe dal codice Python. Posso eseguire il codice bene dalla riga di comando in questo modo:py2exe non trova tutte le dipendenze

python myScript.py 

Ho installato py2exe da qui: http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/

E, hanno un setup.py che assomiglia a questo:

from distutils.core import setup 
import py2exe 

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

E, corro il setup.py in questo modo:

python setup.py py2exe 

ottengo il seguente nell'output :

The following modules appear to be missing 
['Carbon', 'Carbon.Files', '__pypy__', '_scproxy', 'http_parser.http', 'http_parser.reader', 'jinja2._debugsupport', 'jinja2._markupsafe._speedups', 
'jinja2.debugrenderer', 'markupsafe', 'pretty', 'socketpool', 'socketpool.util'] 

E, abbastanza sicuro, se si tenta di eseguire l'exe, ottengo errori:

$ ./myScript.exe 
Traceback (most recent call last): 
    File "restkit\__init__.pyc", line 9, in <module> 
    File "restkit\conn.pyc", line 14, in <module> 
ImportError: No module named socketpool 
Traceback (most recent call last): 
    File "myScript.py", line 12, in <module> 
ImportError: cannot import name Resource 

Che cosa devo fare per ottenere py2exe per trovare le dipendenze?

Grazie

+1

py2exe è un po 'datato (l'ultima modifica è stata nel 2008, credo?). Penso che [PyInstaller] (http://www.pyinstaller.org/) sia un progetto attivo e abbia un supporto molto migliore. Inoltre, guardando i tuoi commenti alle altre risposte, hai i moduli installati a livello di sistema o sono locali al tuo 'myScript.py'? – ernie

+0

Grazie. Sono passato da py2exe e ho provato cx-freeze. I moduli sono installati nella directory Python. Posso importarli bene da una shell python. Darò a PyInstaller un colpo. –

+0

Hai effettivamente 'Carbon' e' Carbon.Files' installati e importabili su una macchina Windows? – abarnert

risposta

0

py2exe è la versione di Python dipendente. Tutto quello che fai sembra essere corretto, suppongo che tu abbia installato la versione sbagliata.

+1

Potrebbe essere, ma, ho Python 2.7.1 e installato py2exe-0.6.9.win32-py2.7.exe. Sembra corretto. –

+0

sì, mi dispiace, io uso la stessa versione e ha funzionato bene. Potresti provare a reinstallarlo se non lo hai già fatto. –

+0

sospiro. Sto avendo lo stesso problema con cx-freeze, portandomi a credere che ci sia qualcosa in questo che impedisce a Python di trovare le dipendenze. –

1

Carbon è il nome di due diverse cose specifiche del Mac.

Innanzitutto, in 2.x, sia per Mac OS X che per Mac Classic, ha un Carbon package nella libreria standard, utilizzato per chiamare le API Carbon/Toolbox (e, in OS X, CoreFoundation e amici).

In secondo luogo, sia in 2.x che in 3.x, su Mac OS X, con PyObjC, il wrapper PyObjC intorno a Carbon.Framework è denominato Carbon. (PyObjC non fa parte dello stdlib, ma viene fornito con build Apple di Python e la maggior parte delle build di terze parti oltre agli installer ufficiali di python.org)

Nessuno di questi sarà presente su Windows.

py2exe cerca di essere intelligente e importa solo cose rilevanti per la tua piattaforma. Tuttavia, è abbastanza facile ingannare. è richiesto

try: 
    import Carbon.Files 
except: 
    Carbon = collections.namedtuple('Carbon', 'Files') 
    Carbon.Files = None 

if Carbon.Files: 
    Carbon.Files.whatever(…) 

... potrebbe far pensare py2exeCarbon.Files: per esempio, qualcosa di simile.

Ora, ovviamente questo non è tutto il tuo problema, ma è una bandiera rossa molto grande che il codice di dipendenza del modulo di py2exe non funziona per il tuo progetto. Probabilmente hai problemi simili con tutti i tipi di altri moduli, quindi mancano entrambe alcune cose di cui hai bisogno e richiedono alcune cose che non hai, e questo è probabilmente ciò che sta causando i tuoi problemi reali.

Come il FAQ spiega, è possibile eseguire il debug di questo eseguendo il codice del modulo-finder per vedere dove sta andando male, in questo modo:

python -m py2exe.mf -d path/to/my_file.py 

Si potrebbe utilizzare queste informazioni per guidare il codice del modulo-finder, o per riscrivere il codice in modo da non confondere py2exe.

O, più semplicemente, solo includere ed escludere esplicitamente i moduli nel tuo setup.py come soluzione alternativa, senza preoccuparsi del motivo per cui vengono rilevati erroneamente.

Problemi correlati