Provo a compilare un progetto Python sotto Windows 7 usando PyInstaller. Il progetto funziona bene, non ci sono problemi, tuttavia quando provo a compilarlo il risultato non funziona. Anche se ho nessun avviso durante la compilazione ci sono molti nel file warnmain.txt
nella directory build
: warnmain.txtPyInstaller - nessun modulo chiamato
non capisco davvero questi avvertimenti, per esempio no module named numpy.pi
poiché numpy.pi
è alcun modulo, ma un numero. Non ho mai provato a importare numpy.pi
. Ho importato numpy
e matplotlib
in modo esplicito. Inoltre sto usando PyQt4. Ho pensato che l'errore potrebbe essere correlato a quelle librerie.
Tuttavia sono stato in grado di compilare un semplice script che utilizza con successo NumPy:
import sys
from PyQt4 import QtGui, QtCore
import numpy as np
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.pb = QtGui.QPushButton(str(np.pi), self)
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
successo qui significa che il file eseguibile creato in realtà ha mostrato l'output desiderato. Tuttavia, esiste anche un file warnmain.txt
che contiene esattamente gli stessi "avvertimenti" di quello precedente. Quindi immagino che il fatto che la compilazione del mio progetto attuale non dia alcun successo non sia (o almeno non solo) correlato a quegli avvertimenti. Ma cos'altro potrebbe essere l'errore allora? L'unico risultato durante la compilazione è 'INFO e nessuna delle è una dichiarazione negativa.
Non ho specificato una directory di hook aggiuntiva ma i hook su cui giù utilizzando la directory di default per quanto ho potuto leggere dall'output di compilazione, ad es. hook-matplotlib
è stato eseguito. Non potevo vedere nessun hook per numpy
né potrei per il mio piccolo script di esempio, ma questo ha funzionato. Ho usato le seguenti importazioni nei miei file (non tutti nello stesso, ma in quelle diverse):
import numpy as np
import matplotlib.pyplot as ppl
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
from PyQt4 import QtGui, QtCore
import json
import sys
import numpy # added this one later
import matplotlib # added this one later
Qualcuno sa che questo problema potrebbe essere correlato a? Poiché PyInstaller non fornisce errori/avvertenze, non sono riuscito a capire se il problema è correlato alle librerie o se c'è qualcos'altro da considerare.
Aggiornamento
Dopo il suggerimento di JoranBeasley ho compilato il programma senza -w
e reindirizzato lo stdout e stderr in un file. Quando si esegue il programma ho ottenuto le seguenti ImportError
s:
no module named Tkinter # seemed to be required by matplotlib
e dopo l'aggiunta import Tkinter
all'inizio del mio file principale ho ottenuto
no module named FileDialog # seemed to be required also by matplotlib
e dopo ho finalmente aggiunto import FileDialog
Il programma funziona in realtà!
si ottiene un errore quando si tenta di avviare il programma da linea di comando? o semplicemente non si avvia e non viene stampato nulla (qt reindirizza lo stdout in qualche altro posto come una finestra di output che si chiude quando si blocca?) ... per approfondire il mio commento sospetto si abbia un crash (probabilmente da qualcosa che usa json/risorse XML o qualcosa (non importa xxxx) ... e il messaggio di errore viene stampato su una finestra QT che finisce per chiudersi quando si blocca ... vedere se qt.App ha un reindirizzamento = False opzione o qualcosa per mantenere il stdout –
È interessante notare che, se dovessi fare qualcosa come "import numpy.sinh", ricevo "ImportError: nessun modulo chiamato sinh", ed è solo quando eseguo "import numpy.numpy.sinh" che ottengo "ImportError: No module named numpy.sinh'. Hai controllato [PyInstaller per scoprire cosa è andato storto] (http://pythonhosted.org/PyInstaller/#finding-out-what-went-wrong)? per catturare errori/importazioni dettagliate/informazioni di debug? – ssnobody
@JoranBeasley: ho appena provato a lanciare l'exe dal cmd senza alcun risultato, ma per comp iling Ho usato il flag '-w' (vedi http://pythonhosted.org/PyInstaller/#options-for-the-executable-output) che impedisce a Windows di avviare una console per qualsiasi input/output. Se compilassi senza '-w' non riesco a ottenere l'interfaccia utente grafica. Tuttavia il programma funziona bene quando si richiama dall'interprete, quindi non penso che sia un errore all'interno. @ssnobody: Sono a conoscenza di quel collegamento ma non ha portato alcun beneficio per me. 'import numpy.sinh' non funzionerà dato che' sinh' non è un modulo. –