# ------------------------------------------------------------------
|
# 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
|
# ------------------------------------------------------------------
|
|
import os
|
import sys
|
from PyInstaller.utils.hooks import collect_data_files, is_module_satisfies, copy_metadata
|
from PyInstaller.compat import is_win
|
|
|
hiddenimports = [
|
"pyproj.datadir"
|
]
|
|
# Versions prior to 2.3.0 also require pyproj._datadir
|
if not is_module_satisfies("pyproj >= 2.3.0"):
|
hiddenimports += ["pyproj._datadir"]
|
|
# Starting with version 3.0.0, pyproj._compat is needed
|
if is_module_satisfies("pyproj >= 3.0.0"):
|
hiddenimports += ["pyproj._compat"]
|
# Linux and macOS also require distutils.
|
if not is_win:
|
hiddenimports += ["distutils.util"]
|
|
# Data collection
|
datas = collect_data_files('pyproj')
|
|
if hasattr(sys, 'real_prefix'): # check if in a virtual environment
|
root_path = sys.real_prefix
|
else:
|
root_path = sys.prefix
|
|
# - conda-specific
|
if is_win:
|
tgt_proj_data = os.path.join('Library', 'share', 'proj')
|
src_proj_data = os.path.join(root_path, 'Library', 'share', 'proj')
|
|
else: # both linux and darwin
|
tgt_proj_data = os.path.join('share', 'proj')
|
src_proj_data = os.path.join(root_path, 'share', 'proj')
|
|
from PyInstaller.compat import is_conda
|
if is_conda:
|
if os.path.exists(src_proj_data):
|
datas.append((src_proj_data, tgt_proj_data))
|
else:
|
from PyInstaller.utils.hooks import logger
|
logger.warning("Datas for pyproj not found at:\n{}".format(src_proj_data))
|
# A runtime hook defines the path for `PROJ_LIB`
|
|
# With pyproj 3.4.0, we need to collect package's metadata due to `importlib.metadata.version(__package__)` call in
|
# `__init__.py`. This change was reverted in subsequent releases of pyproj, so we collect metadata only for 3.4.0.
|
if is_module_satisfies("pyproj == 3.4.0"):
|
datas += copy_metadata("pyproj")
|