Python 如何正确地将PyTZ添加到Google应用程序引擎应用程序?
这有点尴尬,但我还没有找到关于这个话题的好资源 我正在开发一个需要复杂时区转换的谷歌应用程序引擎应用程序。因为我离规定的配额还很远,所以我选择了PyTZ。然而,我一定是做错了什么。到目前为止,我所做的是:Python 如何正确地将PyTZ添加到Google应用程序引擎应用程序?,python,google-app-engine,datetime,timezone,pytz,Python,Google App Engine,Datetime,Timezone,Pytz,这有点尴尬,但我还没有找到关于这个话题的好资源 我正在开发一个需要复杂时区转换的谷歌应用程序引擎应用程序。因为我离规定的配额还很远,所以我选择了PyTZ。然而,我一定是做错了什么。到目前为止,我所做的是: 下载PyTZ作为tarball 安装并复制了pytz 目录插入到我的应用程序的根目录中 (它是webapp 目录,app.yaml所在的位置) 然而,如果我尝试实例化时区,PyTZ似乎永远也找不到。以下是来自GAE交互控制台的示例会话: from pytz import timezone r
pytz
目录插入到我的应用程序的根目录中
(它是webapp
目录,app.yaml
所在的位置)from pytz import timezone
rome = timezone('Europe/Rome')
输出如下:
Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/admin/__init__.py", line 210, in post
exec(compiled_code, globals())
File "<string>", line 3, in <module>
File "/Library/Python/2.5/site-packages/pytz-2009j-py2.5.egg/pytz/__init__.py", line 157, in timezone
UnknownTimeZoneError: 'Europe/Rome'
看起来你没有上传我手头上的pytz版本中22个目录中的
pytz
--570个文件的整个zoneinfo
子树。不知道为什么——默认情况下,如果它们在你的应用程序目录中,它们应该被上传。在触摸一些后,尝试appcfg.py——详细更新(甚至是嘈杂更新),以检查它是否上传了它们
许多小文件在应用程序引擎中是一个麻烦,但要解决这个问题,需要对init.py中的open_resource进行一些调整,使其能够从zipfile中获取“资源”,而不是试图为每个“资源”打开一个实际的单独文件。这提供了关于如何进行的更多细节(特别是评论中的观察结果很有用)。我发现了,这比我预期的更尴尬 问题是(正如我在问题中所指出的那样),我让PyTZ成为了
webapp
的兄弟。但是,为了让GAE能够加载它,它需要是webapp
的子项。这并不奇怪,但如果这是问题所在,我预计导入pytz会失败
无论如何,将PyTZ移动到
webapp
下可以解决这个问题,并且该模块仍然可以从webapp
的兄弟姐妹处访问(例如test
)。根据问题的标题,我想(但还没有这么好的名声)投票支持jgeewax的答案,因为这是我在搜索中发现这个问题时使用的答案。不过,我还要补充一点,在遵循上面提到的说明之后,我在github上创建了一个最小的项目,该项目演示了如何在应用程序引擎中使用pytz和压缩的zoneinfo文件。可能会为某人节省30分钟,以便在此处启动并运行实验:另一种方法是使用包含进一步优化的打包版gae pytz:
您只需要压缩归档中的pytz文件夹,
在gae项目中使用它非常简单:
from pytz.gae import pytz
为了解决这个问题,我采取了与gae pytz不同的策略,我创建了一个。尤其是pytz appengine将所有时区信息放入
ndb
数据存储中
pytz的单元测试通过(至少只要它们通过上游测试)。pytz appengine的主要动机是使按需更新时区数据库变得简单。有一个生成脚本build.py
自动执行此操作
我欢迎任何反馈。pytz现在是GAE图书馆。您可以直接导入它。我使用了此处的第三方说明: 只需将pytz安装到lib目录中,按照说明添加appengine_config.py文件和内容 虽然pytz现在是Google App Engine库的一部分,但是:
我无法让它工作。在app.yaml中,我添加了-name:pytz和version:latest(可能版本应该是上面文档中列出的版本)。但是没用。谢谢你帮我解决了这个问题。然而,我认为这不是问题所在。我对问题进行了编辑,以澄清我的项目目前的结构。您还没有解释什么是目录“webapp”。它是项目的根目录吗(包含app.yaml的目录)?是的,
webapp
是包含app.yaml
的目录。你正确地指出了这个问题是误导性的。我对它进行了编辑,以反映您指出的内容。如果有人愿意给出比我更具启发性的答案,我很乐意接受。
pc-morena:pytz lyudmilangelov$ cd zoneinfo/
pc-morena:zoneinfo lyudmilangelov$ ls -l
total 448
drwxr-xr-x@ 55 lyudmilangelov staff 1870 Nov 10 12:48 Africa
drwxr-xr-x@ 135 lyudmilangelov staff 4590 Nov 10 12:48 America
drwxr-xr-x@ 12 lyudmilangelov staff 408 Nov 10 12:48 Antarctica
drwxr-xr-x@ 3 lyudmilangelov staff 102 Nov 10 12:48 Arctic
drwxr-xr-x@ 93 lyudmilangelov staff 3162 Nov 10 12:48 Asia
...
from pytz.gae import pytz