1
2
3
4 from sys import platform, version_info
5 if version_info >= (3, 8, 0) and platform == 'win32':
6 import os
7 if 'USE_PATH_FOR_GDAL_PYTHON' in os.environ and 'PATH' in os.environ:
8 for p in os.environ['PATH'].split(';'):
9 if p:
10 try:
11 os.add_dll_directory(p)
12 except (FileNotFoundError, OSError):
13 continue
14 elif 'PATH' in os.environ:
15 import glob
16 for p in os.environ['PATH'].split(';'):
17 if glob.glob(os.path.join(p, 'gdal*.dll')) or glob.glob(os.path.join(p, 'libgdal*.dll')):
18 try:
19 os.add_dll_directory(p)
20 except (FileNotFoundError, OSError):
21 continue
22
23
25 import importlib
26 from os.path import dirname, basename
27 mname = basename(dirname(__file__)) + '._gdal'
28 try:
29 return importlib.import_module(mname)
30 except ImportError:
31 if version_info >= (3, 8, 0) and platform == 'win32':
32 import os
33 if not 'USE_PATH_FOR_GDAL_PYTHON' in os.environ:
34 msg = 'On Windows, with Python >= 3.8, DLLs are no longer imported from the PATH.\n'
35 msg += 'If gdalXXX.dll is in the PATH, then set the USE_PATH_FOR_GDAL_PYTHON=YES environment variable\n'
36 msg += 'to feed the PATH into os.add_dll_directory().'
37
38 import sys
39 import traceback
40 traceback_string = ''.join(traceback.format_exception(*sys.exc_info()))
41 raise ImportError(traceback_string + '\n' + msg)
42 return importlib.import_module('_gdal')
43
44
45 _gdal = swig_import_helper()
46 del swig_import_helper
47
48 __version__ = _gdal.__version__ = _gdal.VersionInfo("RELEASE_NAME")
49
50 gdal_version = tuple(int(s) for s in str(__version__).split('.') if s.isdigit())[:3]
51 python_version = tuple(version_info)[:3]
52
53
54
55
56
57
58
59 fail_on_unsupported_version = False
60
61
62
63
64
65
66 gdal_version_and_min_supported_python_version = (
67 ((0, 0), (0, 0)),
68 ((1, 0), (2, 0)),
69 ((2, 0), (2, 7)),
70 ((3, 3), (3, 6)),
71
72
73 )
74
75
77 return '.'.join(str(v) for v in ver) if ver is not None else None
78
79
80 minimum_supported_python_version_for_this_gdal_version = None
81 this_python_version_will_be_deprecated_in_gdal_version = None
82 last_gdal_version_to_supported_your_python_version = None
83 next_version_of_gdal_will_use_python_version = None
84 for gdal_ver, py_ver in gdal_version_and_min_supported_python_version:
85 if gdal_version >= gdal_ver:
86 minimum_supported_python_version_for_this_gdal_version = py_ver
87 if python_version >= py_ver:
88 last_gdal_version_to_supported_your_python_version = gdal_ver
89 if not this_python_version_will_be_deprecated_in_gdal_version:
90 if python_version < py_ver:
91 this_python_version_will_be_deprecated_in_gdal_version = gdal_ver
92 next_version_of_gdal_will_use_python_version = py_ver
93
94
95 if python_version < minimum_supported_python_version_for_this_gdal_version:
96 msg = 'Your Python version is {}, which is no longer supported by GDAL {}. ' \
97 'Please upgrade your Python version to Python >= {}, ' \
98 'or use GDAL <= {}, which supports your Python version.'.\
99 format(ver_str(python_version), ver_str(gdal_version),
100 ver_str(minimum_supported_python_version_for_this_gdal_version),
101 ver_str(last_gdal_version_to_supported_your_python_version))
102
103 if fail_on_unsupported_version:
104 raise Exception(msg)
105 else:
106 from warnings import warn, simplefilter
107 simplefilter('always', DeprecationWarning)
108 warn(msg, DeprecationWarning)
109 elif this_python_version_will_be_deprecated_in_gdal_version:
110 msg = 'You are using Python {} with GDAL {}. ' \
111 'This Python version will be deprecated in GDAL {}. ' \
112 'Please consider upgrading your Python version to Python >= {}, ' \
113 'Which will be the minimum supported Python version of GDAL {}.'.\
114 format(ver_str(python_version), ver_str(gdal_version),
115 ver_str(this_python_version_will_be_deprecated_in_gdal_version),
116 ver_str(next_version_of_gdal_will_use_python_version),
117 ver_str(this_python_version_will_be_deprecated_in_gdal_version))
118
119 from warnings import warn, simplefilter
120 simplefilter('always', DeprecationWarning)
121 warn(msg, DeprecationWarning)
122