2015-04-23 176 views
2

我想在python脚本中使用pytz,以用作hadoop流式作业的映射器。pytz.exceptions.UnknownTimeZone在Python中使用zipimport加载pytz时出现错误

继在另一个线程的建议,我想包装pytz一个zip 'pytz.mod',并与Zipimport一起加载它:

import zipimport 

importer = zipimport.zipimporter('pytz.mod') 
pytz = importer.load_module('pytz') 

from pytz import timezone 
user_timezone = timezone('America/Moncton') 

这提供了以下错误:

Traceback (most recent call last): 
    File "./load-pytz.py", line 15, in <module> 
    user_timezone = timezone('America/Moncton') 
    File "./lib/python2.6/site-packages/pytz/__init__.py", line 180, in timezone 
pytz.exceptions.UnknownTimeZoneError: 'America/Moncton' 

我发现this thread,并且问题似乎是zipimport无法在zoneinfo目录中加载二进制文件。我试图按照线程中的说明操作,但无法让它们工作。是否有一个更简单的机制来打包zoneinfo,而无需通过py2exe?

我需要做的就是本地化UTC时间戳相对于时区,例如'America/Moncton'。

谢谢!

回答

1

您是否尝试过tzlocal?根据我读的Here,pytz会给出一个未知的时区错误,原因有几个。 - 如果你不给它一个时区名称,或者你给它的时区名称,取决于你的操作系统,它与pytz使用的时区名称不同。使用tzlocal将当地时区作为tzinfo对象进行检索,与普通pytz一起使用时,应让您继续执行项目。

正如我上面放置了链接显示,您可以通过

from tzlocal import get_localzone 
tz = get_localzone() 

我不要求这样做是一个专家,只是在做我自己的一些研究,试图帮助了研究员需要。希望这可以帮助你。

+0

tzlocal是伟大的,但我不知道它与问的问题有什么关系。 –

+0

我的理解是,操作无法获得pytz会识别的时区,从而导致他的问题,如果我不正确,请原谅这个错误是在他们没有收到当地时区的范围内。 – Colabambino

+0

它看起来像OP已经知道要使用什么时区。 –