我有一个问题,分发一个应用程序,利用pytz。我正在使用Py2Exe从我的Python源代码创建一个可执行文件。UnknownTimezoneError异常与Python应用程序编译与Py2Exe编译
对于我有这个问题的一个简单的例子,我有: pytz_test.py:
import pytz
tz_au = pytz.timezone("Australia/Sydney")
print tz_au
和setup.py:
from distutils.core import setup
import py2exe
setup(console=['pytz_test.py'], options={"py2exe" : { 'packages': ['pytz'], } })
我然后运行setup.py :
python setup.py py2exe
编译可执行文件。运行创造pytz_test.exe我得到:
我想这是因为时区信息不得到与可执行文件捆绑在一起,但我不知道如何做到这一点。
编辑: 简单的解决办法是添加区信息目录,从在Python site-packages目录的pytz模块,到library.zip。
要自动做到这一点,我也跟着在项目的解决方案谷歌公交数据饲料中使用,来自: http://code.google.com/p/googletransitdatafeed/source/browse/trunk/python/setup.py
我修改setup.py现在看起来像:
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()
您还需要当前版本的setuptools。特别是pkg_resources。 'import pkg_resources'一定不能失败。 – sbaechler 2012-05-01 13:41:48
pkg_resources在哪里使用?或只是通过导入它? – Triztian 2012-08-30 04:45:48