Sto riscontrando un problema nella distribuzione di un'applicazione che utilizza pytz. Sto usando Py2Exe per creare un eseguibile dalla mia fonte Python.UnknownTimezoneError Eccezione generata con Python Applicazione compilata con Py2Exe
Per un semplice esempio del problema che sto avendo, ho: pytz_test.py:
import pytz
tz_au = pytz.timezone("Australia/Sydney")
print tz_au
e in setup.py:
from distutils.core import setup
import py2exe
setup(console=['pytz_test.py'], options={"py2exe" : { 'packages': ['pytz'], } })
Ho poi corro setup.py :
python setup.py py2exe
Che compila l'eseguibile. Esecuzione del creato pytz_test.exe ottengo:
Suppongo che sia perché le informazioni fuso orario non è sempre in bundle con l'eseguibile, ma non sono sicuro di come farlo accadere.
EDIT: Una soluzione semplice sarebbe quella di aggiungere la directory zoneinfo, dal modulo pytz nella directory site-packages python, al library.zip.
per farlo automaticamente, ho seguito la soluzione in quel progetto Google Transit Data Feed usati, da: http://code.google.com/p/googletransitdatafeed/source/browse/trunk/python/setup.py
mio modificato setup.py ora assomiglia:
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()
È inoltre necessaria una versione corrente di setuptools. Specificamente pkg_resources. 'import pkg_resources' non deve fallire. – sbaechler
Dove si usa esattamente 'pkg_resources'? o semplicemente importandolo? – Triztian