pypy3.9: zoneinfo can't find timezones because of missing TZPATH sysconfig var
This breaks e.g. Babel:
>>>> import zoneinfo
raceback (most recent call last):
File "/usr/lib/pypy3.9/zoneinfo/_common.py", line 12, in load_tzdata
return importlib.resources.open_binary(package_name, resource_name)
File "/usr/lib/pypy3.9/importlib/resources.py", line 88, in open_binary
package = _get_package(package)
File "/usr/lib/pypy3.9/importlib/resources.py", line 49, in _get_package
module = _resolve(package)
File "/usr/lib/pypy3.9/importlib/resources.py", line 40, in _resolve
return import_module(name)
File "/usr/lib/pypy3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'tzdata'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/pypy3.9/zoneinfo/_zoneinfo.py", line 43, in __new__
instance = cls._weak_cache.setdefault(key, cls._new_instance(key))
File "/usr/lib/pypy3.9/zoneinfo/_zoneinfo.py", line 70, in _new_instance
file_obj = _common.load_tzdata(key)
File "/usr/lib/pypy3.9/zoneinfo/_common.py", line 24, in load_tzdata
raise ZoneInfoNotFoundError(f"No time zone found with key {key}")
zoneinfo._common.ZoneInfoNotFoundError: 'No time zone found with key America/St_Johns'
FWICS, it's trying to find tzdata
because it can't find the system timezone database. This is because:
>>>> import sysconfig
>>>> sysconfig.get_config_var("TZPATH")
(no output)
On CPython 3.9, I get:
>>> import sysconfig
>>> sysconfig.get_config_var("TZPATH")
'/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo'
FWICS in configure.ac
they default to:
TZPATH="/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo"
and have a --with-tzpath
permitting user override. For our purposes, I suppose adding these paths (maybe preceded by paths relative to sys.prefix
) should suffice. I'm going to try making a patch in a minute.