Show More
@@ -21,6 +21,15 b" QT_API_PYQT5 = 'pyqt5'" | |||
|
21 | 21 | QT_API_PYQTv1 = 'pyqtv1' # Force version 2 |
|
22 | 22 | QT_API_PYQT_DEFAULT = 'pyqtdefault' # use system default for version 1 vs. 2 |
|
23 | 23 | QT_API_PYSIDE = 'pyside' |
|
24 | QT_API_PYSIDE2 = 'pyside2' | |
|
25 | ||
|
26 | api_to_module = {QT_API_PYSIDE2: 'PySide2', | |
|
27 | QT_API_PYSIDE: 'PySide', | |
|
28 | QT_API_PYQT: 'PyQt4', | |
|
29 | QT_API_PYQTv1: 'PyQt4', | |
|
30 | QT_API_PYQT5: 'PyQt5', | |
|
31 | QT_API_PYQT_DEFAULT: 'PyQt4', | |
|
32 | } | |
|
24 | 33 | |
|
25 | 34 | |
|
26 | 35 | class ImportDenier(object): |
@@ -89,8 +98,9 b' def loaded_api():' | |||
|
89 | 98 | |
|
90 | 99 | |
|
91 | 100 | def has_binding(api): |
|
92 | """Safely check for PyQt4/5 or PySide, without importing | |
|
93 | submodules | |
|
101 | """Safely check for PyQt4/5 or PySide, without importing submodules | |
|
102 | ||
|
103 | Supports Python <= 3.3 | |
|
94 | 104 | |
|
95 | 105 | Parameters |
|
96 | 106 | ---------- |
@@ -104,12 +114,7 b' def has_binding(api):' | |||
|
104 | 114 | # we can't import an incomplete pyside and pyqt4 |
|
105 | 115 | # this will cause a crash in sip (#1431) |
|
106 | 116 | # check for complete presence before importing |
|
107 | module_name = {QT_API_PYSIDE: 'PySide', | |
|
108 | QT_API_PYQT: 'PyQt4', | |
|
109 | QT_API_PYQTv1: 'PyQt4', | |
|
110 | QT_API_PYQT5: 'PyQt5', | |
|
111 | QT_API_PYQT_DEFAULT: 'PyQt4'} | |
|
112 | module_name = module_name[api] | |
|
117 | module_name = api_to_module[api] | |
|
113 | 118 | |
|
114 | 119 | import imp |
|
115 | 120 | try: |
@@ -131,6 +136,48 b' def has_binding(api):' | |||
|
131 | 136 | except ImportError: |
|
132 | 137 | return False |
|
133 | 138 | |
|
139 | def has_binding_new(api): | |
|
140 | """Safely check for PyQt4/5 or PySide, without importing submodules | |
|
141 | ||
|
142 | Supports Python >= 3.4 | |
|
143 | ||
|
144 | Parameters | |
|
145 | ---------- | |
|
146 | api : str [ 'pyqtv1' | 'pyqt' | 'pyqt5' | 'pyside' | 'pyqtdefault'] | |
|
147 | Which module to check for | |
|
148 | ||
|
149 | Returns | |
|
150 | ------- | |
|
151 | True if the relevant module appears to be importable | |
|
152 | """ | |
|
153 | module_name = api_to_module[api] | |
|
154 | from importlib.util import find_spec | |
|
155 | ||
|
156 | required = ['QtCore', 'QtGui', 'QtSvg'] | |
|
157 | if api in (QT_API_PYQT5, QT_API_PYSIDE2): | |
|
158 | # QT5 requires QtWidgets too | |
|
159 | required.append('QtWidgets') | |
|
160 | ||
|
161 | for submod in required: | |
|
162 | try: | |
|
163 | spec = find_spec('%s.%s' % (module_name, submod)) | |
|
164 | except ImportError: | |
|
165 | # Package (e.g. PyQt5) not found | |
|
166 | return False | |
|
167 | else: | |
|
168 | if spec is None: | |
|
169 | # Submodule (e.g. PyQt5.QtCore) not found | |
|
170 | return False | |
|
171 | ||
|
172 | if api == QT_API_PYSIDE: | |
|
173 | # We can also safely check PySide version | |
|
174 | import PySide | |
|
175 | return check_version(PySide.__version__, '1.0.3') | |
|
176 | ||
|
177 | return True | |
|
178 | ||
|
179 | if sys.version_info >= (3, 4): | |
|
180 | has_binding = has_binding_new | |
|
134 | 181 | |
|
135 | 182 | def qtapi_version(): |
|
136 | 183 | """Return which QString API has been set, if any |
General Comments 0
You need to be logged in to leave comments.
Login now