在 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 很慢的主要内容,如果未能解决你的问题,请参考以下文章