2015-01-14 3 views
11

Devo pacchetti (ad esempio, dataread e datainspector) che in qualche modo non vengono rilevati da PyInstaller. Per questo motivo, l'applicazione termina quando l'applicazione in esecuzione raggiunge il punto in cui è necessario importare i moduli da tali pacchetti.Come creare correttamente un hook pyinstaller, o forse l'importazione nascosta?

La soluzione più semplice sarebbe quella di copiare dataread e datainspector nell'app pacchettizzata. Ma questo interromperà l'intenzione di impacchettare una versione binaria dell'applicazione.

Ho letto di importazioni e hook nascosti, e penso che entrambi possano risolvere il problema. Ma non sono sicuro di quale usare.

Qualche suggerimento? PS: entrambi questi pacchetti possono contenere la directory nidificata

+0

Beh, è ​​davvero una tua decisione qui. Dovresti usare la tua esperienza per scegliere. Penso che le idee delle altre persone che hanno funzionato per loro potrebbero non funzionare per te. Mettili alla prova per i migliori risultati. –

+0

Al momento, la mia esperienza è molto limitata per entrambi i modi. Ma lavorando su di esso al momento;) Penso che la documentazione di PyInstaller sia necessaria per gettare un vero e proprio concept di base per chi è nuovo alla loro tecnologia. Per esempio non sono sicuro di dove vanno i miei pacchi .... È nel * .exe .. o cosa? Mi piacerebbe avere una bella risposta per questo ..;) – swdev

risposta

19

Gli hook sono file che specificano ulteriori azioni quando pyinstaller trova l'istruzione import. Quindi, se aggiungi il file "hook-data.py" con hiddenimports = ['_proxy', 'utils', 'defs'] all'interno se pyinstaller troverà import data controllerà i comandi aggiuntivi all'interno del file hook-data.py. È necessario specificare il percorso a ganci da --additional-hooks-dir (è meglio tenere spazio di lavoro pulito che miscelare i file di compilazione solo con fonte)

http://pythonhosted.org/PyInstaller/hooks.html

La soluzione più semplice è quella di utilizzare --hidden-import=modulename insieme con lo script pyinstaller. Aggiungerà silenziosamente modulo come istruzione import.

I ganci sono migliori se si desidera specificare quale file richiede quale modulo. "--hidden-import" è più semplice come one-shot o per il debug.

+0

Phew .. questa è la risposta più utile finora. Lo userò prima per provare a risolvere il mio problema. Proverò prima di fare un'altra domanda. Grazie! – swdev

+2

Dove dovresti mettere questo file? Il file –

+0

può essere ovunque ma è meglio tenerlo in una cartella separata rispetto alla sorgente, se si sta solo sperimentando si può passare '.' (punto) a --additional-hooks-dir. Ho usato una speciale cartella 'pyinstaller_hooks'. – alkuzad