2012-07-04 23 views

Respuesta

3

Me estoy sorprendido de que nadie mencionó el funcionario opción soportada mediante Tree():

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

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

+1

Gracias por compartir, usando [la clase Tree] (https://pythonhosted.org/PyInstaller/advanced-topics.html#the-tree-class) me lo resolvió de una manera elegante. Ahora solo necesito esta línea: 'a.datas + = Tree ('./ dir_to_include', prefix = 'dir_to_include')' – sunyata

+0

sí, creo que simplemente no está suficientemente documentado, pero esta fuente abierta, por lo que Los RP son bienvenidos :) – denfromufa

4

¿Qué tal si usamos glob?

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

a.datas = datas 
17

pegue el siguiente después de a = Analysis() en el archivo de especificaciones para atravesar un directorio recursivamente y añadir todos los archivos en ella para la distribución.

##### 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

Disculpe, pero en realidad no lo consigue. Tengo un directorio llamado '~/Scripts'. Mis datos se almacenan en '~/Scripts/Data'. ¿Debo sustituir 'a.datas + = extra_datas ('data')' por 'a.datas + = extra_datas ('Data')'? –

+0

Si su script pyInstaller también está en 'Scripts' y lo llama con' python mybuildscript.py' desde 'Scripts', entonces sí, debe sustituirlo por' Data', de lo contrario use '.' y' ..' para navegar el árbol de directorios. – styts

Cuestiones relacionadas