| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- # ------------------------------------------------------------------
- # Copyright (c) 2020 PyInstaller Development Team.
- #
- # This file is distributed under the terms of the GNU General Public
- # License (version 2.0 or later).
- #
- # The full license is available in LICENSE, distributed with
- # this software.
- #
- # SPDX-License-Identifier: GPL-2.0-or-later
- # ------------------------------------------------------------------
- from PyInstaller.utils.hooks import get_module_attribute, collect_submodules
- from PyInstaller.utils.hooks import is_module_satisfies
- # By default, PyPi wheels for pydantic < 2.0.0 come with all modules compiled as cython extensions, which prevents
- # PyInstaller from automatically picking up the submodules.
- if is_module_satisfies('pydantic >= 2.0.0'):
- # The `pydantic.compiled` attribute was removed in v2.
- is_compiled = False
- else:
- # NOTE: in PyInstaller 4.x and earlier, get_module_attribute() returns the string representation of the value
- # ('True'), while in PyInstaller 5.x and later, the actual value is returned (True).
- is_compiled = get_module_attribute('pydantic', 'compiled') in {'True', True}
- # Collect submodules from pydantic; even if the package is not compiled, contemporary versions (2.11.1 at the time
- # of writing) contain redirections and programmatic imports.
- hiddenimports = collect_submodules('pydantic')
- if is_compiled:
- # In compiled version, we need to collect the following modules from the standard library.
- hiddenimports += [
- 'colorsys',
- 'dataclasses',
- 'decimal',
- 'json',
- 'ipaddress',
- 'pathlib',
- 'uuid',
- # Optional dependencies.
- 'dotenv',
- 'email_validator'
- ]
- # Older releases (prior 1.4) also import distutils.version
- if not is_module_satisfies('pydantic >= 1.4'):
- hiddenimports += ['distutils.version']
- # Version 1.8.0 introduced additional dependency on typing_extensions
- if is_module_satisfies('pydantic >= 1.8'):
- hiddenimports += ['typing_extensions']
|