# ------------------------------------------------------------------
|
# 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.GPL.txt, 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, pydantic from PyPi comes with all modules compiled as
|
# cpython extensions, which seems to prevent pyinstaller from automatically
|
# picking up the submodules.
|
# 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}
|
if is_compiled:
|
# Compiled version; we need to manually collect the submodules from
|
# pydantic...
|
hiddenimports = collect_submodules('pydantic')
|
# ... as well as 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']
|