2012-07-04 8 views

risposta

3

mi sono sorpreso che nessuno ha menzionato l'opzione ufficiale ha sostenuto con Tree():

https://stackoverflow.com/a/20677118/2230844

https://pythonhosted.org/PyInstaller/advanced-topics.html#the-toc-and-tree-classes

+1

Grazie per la condivisione, utilizzando [la classe Tree] (https://pythonhosted.org/PyInstaller/advanced-topics.html#the-tree-class) l'ho risolto in modo elegante. Ora ho solo bisogno di questa riga: 'a.datas + = Tree ('./ dir_to_include', prefisso = 'dir_to_include')' – sunyata

+0

sì, penso che non sia documentato abbastanza bene, ma questo open-source, quindi I PR sono i benvenuti :) – denfromufa

4

Che dire semplicemente usando glob?

from glob import glob 
datas = [] 
datas += glob('/path/to/filedir/*') 
datas += glob('/path/to/textdir/*.txt') 
... 

a.datas = datas 
17

Incollare il seguente testo dopo a = Analysis() nel file spec per attraversare una directory ricorsivamente e aggiungere tutti i file in essa contenuti alla distribuzione.

##### include mydir in distribution ####### 
def extra_datas(mydir): 
    def rec_glob(p, files): 
     import os 
     import glob 
     for d in glob.glob(p): 
      if os.path.isfile(d): 
       files.append(d) 
      rec_glob("%s/*" % d, files) 
    files = [] 
    rec_glob("%s/*" % mydir, files) 
    extra_datas = [] 
    for f in files: 
     extra_datas.append((f, f, 'DATA')) 

    return extra_datas 
########################################### 

# append the 'data' dir 
a.datas += extra_datas('data') 
+0

Mi scusi, ma io non capisco proprio. Ho una directory chiamata '~/Scripts'. I miei dati sono memorizzati in ~ ~/Scripts/Data'. Dovrei sostituire 'a.datas + = extra_datas ('data')' da 'a.datas + = extra_datas ('Data')'? –

+0

Se il tuo script pyInstaller si trova anche in 'Script' e lo chiami con' python mybuildscript.py' da dentro 'Script' allora sì, devi sostituire con 'Dati', altrimenti usa' .' e '..' per navigare l'albero delle directory. – styts