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()