This is a little embarrassing, but I have not been able to find good resources on this topic.
I'm working on a Google App Engine application that requires sophisticated time zone conversions. Since I am nowhere near the imposed quotas, I have opted to go with PyTZ. However, I must be doing something wrong. What I've done so far is:
- Downloaded PyTZ as a tarball
- Installed it and copied the
pytz
directory into the root of my app (it is a sibling of thewebapp
directory, whereapp.yaml
is located).
However, if I try to instantiate timezones, PyTZ can never seem to find any. Here is a sample session from GAE's interactive console:
from pytz import timezone
rome = timezone('Europe/Rome')
The output is the following:
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'
What is it I am doing wrong? Thank you in advance for your help.
NOTE: If I just use the python interactive shell locally things work as expected:
>>> 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>)
Edit: I need to clarify I'm not using a zipped version of PyTZ. I have included the whole zoneinfo
directory in my project:
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
...
I used the 3rd party instructions found here: https://cloud.google.com/appengine/docs/standard/python/tools/using-libraries-python-27
Simply pip install pytz into the lib directory, add the appengine_config.py file and the contents as instructed.
While pytz is now part of Google App Engine's lib per: https://cloud.google.com/appengine/docs/standard/python/tools/built-in-libraries-27 I couldn't get it to work. In the app.yaml I added - name: pytz and version: latest (perhaps the version should have been one listed in the above doc). But it didn't work.