在 virtualenv 中第一次调用 pytz.timezone 很慢

Posted

技术标签:

【中文标题】在 virtualenv 中第一次调用 pytz.timezone 很慢【英文标题】:First call to pytz.timezone is slow in virtualenv 【发布时间】:2013-12-28 08:24:09 【问题描述】:

我已经在 virtualenv 中安装了 pytz(v2013.8,但它发生在 2013.b、2011k)。第一次调用

pytz.timezone("US/Eastern")

大约需要 4 秒。在常规环境中,这基本上是瞬时的。

有没有人有办法让它运行得更快?

【问题讨论】:

这在未来可能会很有帮助,干得好! :) 当您需要代表时,考虑重新发布作为答案。 【参考方案1】:

我实际上是通过四处玩耍和查看源代码找到了答案。由于它从 egg 中获取其时区设置,并且对 timezone 的第一次调用必须检查所有时区文件是否存在,因此第一次调用可能会很慢,具体取决于操作系统如何找到这些文件。如果 pytz 是使用apt-get install python-tz 安装的,那么调用会命中未压缩的文件并且速度非常快。如果它是使用easy_install pytz 安装的,那么它会一遍又一遍地点击一个压缩文件并且速度较慢。

所以解决办法就是解压。幸运的是 pip 有一个方便的命令。

tl;博士

pip unzip pytz

【讨论】:

自 7.0.0 版本以来,pip 中不再存在“解压缩”命令。见pip.pypa.io/en/stable/news【参考方案2】:

似乎在 Windows 中只需删除 pytz-2013.9-py2.7.egg

【讨论】:

【参考方案3】:

我很难跑

pip 解压 pytz

因为它说它找不到包。我发现一个可行的解决方法是编辑 setup.py 文件并替换

zip_safe=False

。 (将其设置为 False)。然后再次运行安装程序:

python setup.py 安装

这也解决了我加载时间慢的问题。

【讨论】:

【参考方案4】:

其实可以通过设置环境变量PYTZ_TZDATADIR来指定zoneinfo的位置:

export PYTZ_TZDATADIR=/usr/share/zoneinfo

仅当未设置 PYTZ_TZDATADIR 时才读取压缩的 zoneinfo 文件。

【讨论】:

以上是关于在 virtualenv 中第一次调用 pytz.timezone 很慢的主要内容,如果未能解决你的问题,请参考以下文章

为啥 pytz 似乎没有任何时区信息?

pytz:获取所有时区,现在在特定时间范围之间

django

从 django 应用程序调用 unoconv 的问题,在 virtualenv 中运行

使用 pytz 从 UTC 偏移“规范”?

pytz UTC 转换