Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确地将PyTZ添加到Google应用程序引擎应用程序?_Python_Google App Engine_Datetime_Timezone_Pytz - Fatal编程技术网

Python 如何正确地将PyTZ添加到Google应用程序引擎应用程序?

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。然而,我一定是做错了什么。到目前为止,我所做的是:

  • 下载PyTZ作为tarball
  • 安装并复制了
    pytz
    目录插入到我的应用程序的根目录中 (它是
    webapp
    目录,
    app.yaml
    所在的位置)
  • 然而,如果我尝试实例化时区,PyTZ似乎永远也找不到。以下是来自GAE交互控制台的示例会话:

    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