python编制应用程序错误_使用Py2Ex编译的Python应用程序引发UnknownTimezoneError异常...

我在分发使用pytz的应用程序时遇到问题。我使用Py2Exe从我的Python源代码创建一个可执行文件。

举个简单的例子,我有:

pytz_测试.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.exeTraceback (most recent call last):

File "pytz_test.py", line 3, in

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

File "pytz\__init__.pyc", line 185, in timezone

pytz.exceptions.UnknownTimeZoneError: 'Australia/Sydney'

我认为这是因为时区信息没有与可执行文件捆绑在一起,但我不确定如何实现它。

编辑:

一个简单的解决方案是将zoneinfo目录从python site packages目录中的pytz模块添加到library.zip中。

我修改过的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()