Tengo un problema al distribuir una aplicación que utiliza pytz. Estoy usando Py2Exe para crear un ejecutable desde mi fuente de Python.DesconocidoTimezoneExcepción de error provocada con la aplicación Python compilada con Py2Exe
Para un simple ejemplo del problema que estoy teniendo, que tengo: pytz_test.py:
import pytz
tz_au = pytz.timezone("Australia/Sydney")
print tz_au
y en setup.py:
from distutils.core import setup
import py2exe
setup(console=['pytz_test.py'], options={"py2exe" : { 'packages': ['pytz'], } })
entonces corro setup.py :
python setup.py py2exe
Que compila el ejecutable. Ejecución de la creado pytz_test.exe me sale:
supongo que se debe a que la información de zona horaria no se está incluido con el ejecutable, pero no estoy seguro de cómo hacer que suceda.
EDIT: Una solución sencilla sería la de agregar el directorio de información de zonas , desde el módulo pytz en el directorio site-packages de Python, a la library.zip.
Para hacer esto automáticamente, he seguido la solución en ese proyecto RSS Google Transit datos utilizado, a partir de: http://code.google.com/p/googletransitdatafeed/source/browse/trunk/python/setup.py
Mi modificado setup.py ahora queda como:
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()
También necesita una versión actual de setuptools. Específicamente pkg_resources. 'import pkg_resources' no debe fallar. – sbaechler
¿Dónde exactamente se usa 'pkg_resources'? o simplemente importándolo? – Triztian