Skip to content

Module 'tzdata' is a dependency of ZoneInfo #180

Open
@ItsShunya

Description

@ItsShunya

Using the dataclass-wizard module using Python v3.11.0 I got the following error:

Traceback (most recent call last):
  File "C:\Users\victor.luque.NEUROELECTRICS\.pyenv\pyenv-win\versions\3.11.0\Lib\zoneinfo\_common.py", line 12, in load_tzdata
    return resources.files(package_name).joinpath(resource_name).open("rb")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\victor.luque.NEUROELECTRICS\.pyenv\pyenv-win\versions\3.11.0\Lib\importlib\resources\_common.py", line 22, in files
    return from_package(get_package(package))
                        ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\victor.luque.NEUROELECTRICS\.pyenv\pyenv-win\versions\3.11.0\Lib\importlib\resources\_common.py", line 53, in get_package
    resolved = resolve(package)
               ^^^^^^^^^^^^^^^^
  File "C:\Users\victor.luque.NEUROELECTRICS\.pyenv\pyenv-win\versions\3.11.0\Lib\importlib\resources\_common.py", line 44, in resolve
    return cand if isinstance(cand, types.ModuleType) else importlib.import_module(cand)
                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\victor.luque.NEUROELECTRICS\.pyenv\pyenv-win\versions\3.11.0\Lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1128, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1142, 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 "C:\Repositories\ItsShunya\src\today.py", line 8, in <module>
    from config import environment, config
  File "C:\Repositories\ItsShunya\src\config\config.py", line 3, in <module>
    from dataclass_wizard import YAMLWizard
  File "C:\Repositories\ItsShunya\.venv\Lib\site-packages\dataclass_wizard\__init__.py", line 121, in <module>
    from .bases_meta import LoadMeta, DumpMeta, EnvMeta
  File "C:\Repositories\ItsShunya\.venv\Lib\site-packages\dataclass_wizard\bases_meta.py", line 10, in <module>
    from .abstractions import AbstractJSONWizard
  File "C:\Repositories\ItsShunya\.venv\Lib\site-packages\dataclass_wizard\abstractions.py", line 10, in <module>
    from .bases import META
  File "C:\Repositories\ItsShunya\.venv\Lib\site-packages\dataclass_wizard\bases.py", line 9, in <module>
    from .v1.enums import KeyAction, KeyCase
  File "C:\Repositories\ItsShunya\.venv\Lib\site-packages\dataclass_wizard\v1\__init__.py", line 20, in <module>
    from .models import (Alias,
  File "C:\Repositories\ItsShunya\.venv\Lib\site-packages\dataclass_wizard\v1\models.py", line 23, in <module>
    UTC = ZoneInfo('UTC')
          ^^^^^^^^^^^^^^^
  File "C:\Users\victor.luque.NEUROELECTRICS\.pyenv\pyenv-win\versions\3.11.0\Lib\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 UTC'

I was able to narrow down the issue to an environment with only dataclass_wizard installed and the issue is reproduced consistently on my machine. To solve it I just had to do pip install tzdata.

The reason for this issue seems to come from the ZoneInfo module, which since Python 3.9 is provided with the default Python installation. (source: https://docs.python.org/3/library/zoneinfo.html#data-sources)

The zoneinfo module does not directly provide time zone data, and instead pulls time zone information from the system time zone database or the first-party PyPI package tzdata, if available. Some systems, including notably Windows systems, do not have an IANA database available, and so for projects targeting cross-platform compatibility that require time zone data, it is recommended to declare a dependency on tzdata. If neither system data nor tzdata are available, all calls to ZoneInfo will raise ZoneInfoNotFoundError.

This seems to be caused by the latest update (v0.35.0) where support and awareness for UTC timezone was added:

UTC = ZoneInfo('UTC')

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions