3

これは少し恥ずかしいことですが、私はこのトピックに関する良いリソースを見つけることができませんでした。

高度なタイムゾーン変換を必要とするGoogleAppEngineアプリケーションに取り組んでいます。私は課せられた割り当てにほど遠いので、PyTZを使用することにしました。しかし、私は何か間違ったことをしているに違いありません。私がこれまでに行ったことは次のとおりです。

  1. tarballとしてPyTZをダウンロード
  2. それをインストールし、ディレクトリを私のアプリのルートにコピーしました(これは、が配置されている ディレクトリpytz の兄弟です)。webappapp.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'

私が間違っているのは何ですか?よろしくお願いします。

:Pythonインタラクティブシェルをローカルで使用するだけの場合、期待どおりに機能します。

>>> from pytz import datetime, timezone
>>> rome = timezone('Europe/Rome')
>>> rome.localize(datetime.datetime.now())
datetime.datetime(2009, 11, 12, 0, 4, 52, 990114, tzinfo=<DstTzInfo 'Europe/Rome' CET+1:00:00 STD>)

編集:私はPyTZのzipバージョンを使用していないことを明確にする必要があります。zoneinfoプロジェクトにディレクトリ全体を含めました。

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
...
4

7 に答える 7

4

この問題に対応してgae-pytz、私はpytz-appengineとは別の方法で作成しました。特に pytz-appengine は、すべてのタイムゾーン情報をndbデータストアに入れます。

pytz パスの単体テスト (少なくともアップストリームを通過する限り)。pytz-appengine の主な動機は、オンデマンドでタイムゾーン データベースを簡単に更新できるようにすることでした。build.pyこれを自動的に行うビルド スクリプトがあります。

に関するフィードバックを歓迎します。

于 2013-03-18T19:48:23.690 に答える
3

私が手元に持っているpytzのバージョンでは、22個のディレクトリにある570個zoneinfoのファイルのサブツリー全体をアップロードしていないようです。pytz理由はわかりません-デフォルトでは、アプリディレクトリにある場合、アップロードする必要があります。いくつか触れた後、appcfg.py --verbose update (または --noisy) を試して、それらがアップロードされるかどうかを確認してください

多くの小さなファイルはアプリ エンジンでは面倒ですが、これを修正するには、 init .pyで関数 open_resource を微調整して、「リソース」ごとに実際に個別のファイルを開こうとするのではなく、zipfile 内から「リソース」を取得する必要があります。このブログでは、その方法について詳しく説明しています (特に、コメントの所見は役に立ちます)。

于 2009-11-12T00:45:42.530 に答える
2

気づいたら予想以上に恥ずかしかった。

問題は、(質問で指定したように) PyTZ を の兄弟にしたことでしたwebappただし、GAE がロードできるようにするには、 の子である必要がありwebappます。これはそれほど驚くべきことではありませんが、import pytzそれが問題だったら失敗すると思っていました。

いずれにせよ、PyTZ を下に移動webappすると問題が修正され、モジュールはwebapp(例: test) の兄弟から引き続きアクセスできます。

于 2009-11-12T02:12:50.293 に答える
2

別の方法として、さらに最適化されたパッケージ版の gae-pytz を使用することもできます: http://pypi.python.org/pypi/gaepytz

zip アーカイブ内の pytz フォルダーのみが必要です。これを gae プロジェクトで使用するのは次のように簡単です。

from pytz.gae import pytz
于 2010-08-18T15:00:22.520 に答える