2012-05-15 12 views
9

Ho notato che pytz non trova la cartella zoneinfo quando provo a eseguire il roll zip per Windows. In questo momento ho una soluzione che uso dopo python setup.py build, vale a direcx_freeze: Come posso aggiungere i file del pacchetto in library.zip?

7z a -xr!*.py* build\exe.win32-2.7\library.zip C:\Python27\Lib\site-packages\pytz 

Esiste un modo corretto per raggiungere tale da setup.py o qualcosa del genere?

+0

È possibile provare l'opzione zip-include. Documenti: http://cx_freeze.readthedocs.org/en/latest/distutils.html –

+0

Questa opzione è per l'aggiunta di file nello ZIP finale se lo compilo. Nel mio caso sto parlando di library.zip e non dello ZIP finale per la ridistribuzione. Sto ottenendo 'errore: errore nello script di installazione: il comando 'build_exe' non ha questa opzione 'zip-include'' se provo cosa suggerisci. Di solito si usa l'opzione _packages_ per includere il codice, ma _pytz_ ha solo file di dati e questa opzione fallisce se provo ad aggiungere un "pacchetto" _pytz/zoneinfo_. – mlt

+1

Provare a dare come 'zip_includes', distutils può essere divertente su trattini/caratteri di sottolineatura. Penso che 'zip-includes' stia parlando di library.zip - cx_Freeze non chiude automaticamente tutto per la distribuzione, anche se ovviamente puoi farlo tu stesso. –

risposta

12

Si potrebbe risolvere questo problema, aggiungere il seguente metodo:

def include_files(): 
     path_base = "C:\\Python27\\Lib\\site-packages\\pytz\\zoneinfo\\" 
     skip_count = len(path_base) 
     zip_includes = [(path_base, "pytz/zoneinfo/")] 
     for root, sub_folders, files in os.walk(path_base): 
      for file_in_root in files: 
       zip_includes.append(
         ("{}".format(os.path.join(root, file_in_root)), 
         "{}".format(os.path.join("pytz/zoneinfo", root[skip_count:], file_in_root)) 
         ) 
       )  
     return zip_includes 

Poi, in un file setup.py:

build_exe_options = {"packages": ["os"], 
        "excludes": ["tkinter"], 
        "zip_includes": include_files(), 
        ... 
        } 

Speranza che aiuta

+1

Questo ha funzionato alla grande per me, grazie! Ho dovuto fare un piccolo aggiustamento: skip_count necessario 1 aggiunto ad esso altrimenti aveva una barra iniziale, che cancella il primo argomento per os.path.join. – Motoma

+0

contrassegnarlo come risolto? – chwi

+0

hm, python 3.4. Le informazioni sulla zona sono incluse in 'pytz \ zoneinfo' ma non trovate – Winand

2

Ho risolto questo problema in Python 3.4 nel modo seguente

import pytz 
setup(
    ... 
    options = {'build_exe': 
     {'include_files': (pytz.__path__[0],), ...}, 
    }, 
) 

Quindi pytz è stato decompresso con tutti i relativi fusi orari

Problemi correlati