| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- # ------------------------------------------------------------------
- # Copyright (c) 2024 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 is_module_satisfies, collect_data_files
- hiddenimports = []
- datas = []
- # In pydicom 3.0.0, the `pydicom.encoders` plugins were renamed to `pydicom.pixels.encoders`, and
- # `pydicom.pixels.decoders` were also added. We need to collect them all, because they are loaded during
- # `pydicom` module initialization. We intentionally avoid using `collect_submodules` here, because that causes
- # import of `pydicom` with logging framework initialized, which results in error tracebacks being logged for all plugins
- # with missing libraries (see https://github.com/pydicom/pydicom/issues/2128).
- if is_module_satisfies('pydicom >= 3.0.0'):
- hiddenimports += [
- "pydicom.pixels.decoders.gdcm",
- "pydicom.pixels.decoders.pylibjpeg",
- "pydicom.pixels.decoders.pillow",
- "pydicom.pixels.decoders.pyjpegls",
- "pydicom.pixels.decoders.rle",
- "pydicom.pixels.encoders.gdcm",
- "pydicom.pixels.encoders.pylibjpeg",
- "pydicom.pixels.encoders.native",
- "pydicom.pixels.encoders.pyjpegls",
- ]
- # With pydicom 3.0.0, initialization of `pydicom` (unnecessarily) imports `pydicom.examples`, which attempts to set
- # up several test datasets: https://github.com/pydicom/pydicom/blob/v3.0.0/src/pydicom/examples/__init__.py#L10-L24
- # Some of those are bundled with the package itself, some are downloaded (into `.pydicom/data` directory in user's
- # home directory) on he first `pydicom.examples` import.
- #
- # The download code requires `pydicom/data/urls.json` and `pydicom/data/hashes.json`; the lack of former results in
- # run-time error, while the lack of latter results in warnings about dataset download failure.
- #
- # The test data files that are bundled with the package are not listed in `urls.json`, so if they are missing, there
- # is not attempt to download them. Therefore, try to get away without collecting them here - if anyone actually
- # requires them in the frozen application, let them explicitly collect them.
- additional_data_patterns = [
- 'urls.json',
- 'hashes.json',
- ]
- else:
- hiddenimports += [
- "pydicom.encoders.gdcm",
- "pydicom.encoders.pylibjpeg",
- "pydicom.encoders.native",
- ]
- additional_data_patterns = []
- # Collect data files from `pydicom.data`; charset files and palettes might be needed during processing, so always
- # collect them. Some other data files became required in v3.0.0 - the corresponding patterns are set accordingly in
- # `additional_data_patterns` in the above if/else block.
- datas += collect_data_files(
- 'pydicom.data',
- includes=[
- 'charset_files/*',
- 'palettes/*',
- *additional_data_patterns,
- ],
- )
|