gpt4 book ai didi

python - 使用 Py2Exe 编译的 Python 应用程序引发 UnknownTimezoneError 异常

转载 作者:太空狗 更新时间:2023-10-29 17:50:23 27 4
gpt4 key购买 nike

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

举一个我遇到的问题的简单例子,我有: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 我得到:

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'

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

编辑:一个简单的解决方案是将 zoneinfo 目录从 python 站点包目录中的 pytz 模块添加到 library.zip

为了自动执行此操作,我遵循了 Google Transit Data Feed 项目中使用的解决方案,来自: 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()

最佳答案

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

为了自动执行此操作,我遵循了 Google Transit Data Feed 项目使用的解决方案,来自: 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()

(提问者回答)

关于python - 使用 Py2Exe 编译的 Python 应用程序引发 UnknownTimezoneError 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9158846/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com