UnknownTimezoneError Excepción generada con la aplicación Python compilada con Py2Exe

Tengo problemas para distribuir una aplicación que utiliza pytz. Estoy usando Py2Exe para crear un ejecutable desde mi fuente Python.

Para un ejemplo simple del problema que tengo, tengo: pytz_test.py

import pytz

tz_au = pytz.timezone("Australia/Sydney")
print tz_au

and en setup.py

from distutils.core import setup
import py2exe

setup(console=['pytz_test.py'], options={"py2exe" : { 'packages': ['pytz'], } })

Luego ejecuto setup.py

python setup.py py2exe

Que compila el ejecutable. Ejecutando el @ crea pytz_test.exe Yo obtengo

Traceback (most recent call last):
  File "pytz_test.py", line 3, in <module>
    tz_au = pytz.timezone("Australia/Sydney")
  File "pytz\__init__.pyc", line 185, in timezone
pytz.exceptions.UnknownTimeZoneError: 'Australia/Sydney'

Supongo que se debe a que la información de la zona horaria no se incluye con el ejecutable, pero no estoy seguro de cómo hacerlo.

EDIT: una solución simple sería agregar zoneinfo directorio, desde el pytz módulo en el directorio de paquetes de sitio de Python, a la library.zip.

ara hacer esto automáticamente, seguí la solución en ese proyectoGoogle Transit Data Feed usado desde:http: //code.google.com/p/googletransitdatafeed/source/browse/trunk/python/setup.p

Mi modificado setup.py ahora se ve así:

from distutils.core import setup
import glob
import py2exe

options = {
    "py2exe" : { 
        "compressed": 1, 
        "optimize": 2,
        'packages': ['pytz'], 
     } 
}

setup(console=['pytz_test.py'], options=options)

import pytz
import os 
import zipfile
zipfile_path = os.path.join("dist/" 'library.zip')
z = zipfile.ZipFile(zipfile_path, 'a')
zoneinfo_dir = os.path.join(os.path.dirname(pytz.__file__), 'zoneinfo')
disk_basedir = os.path.dirname(os.path.dirname(pytz.__file__))
for absdir, directories, filenames in os.walk(zoneinfo_dir):
    assert absdir.startswith(disk_basedir), (absdir, disk_basedir)
    zip_dir = absdir[len(disk_basedir):]
    for f in filenames:
      z.write(os.path.join(absdir, f), os.path.join(zip_dir, f))

z.close()

Respuestas a la pregunta(4)

Su respuesta a la pregunta