Plugins/PluginPipInterface.py

changeset 6074
c44902c128ea
parent 6048
82ad8ec9548c
child 6076
b784925fb174
equal deleted inserted replaced
6073:a679240821cb 6074:c44902c128ea
10 from __future__ import unicode_literals 10 from __future__ import unicode_literals
11 11
12 import os 12 import os
13 import platform 13 import platform
14 14
15 from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication 15 from PyQt5.QtCore import pyqtSignal, QObject, QCoreApplication, QProcess
16 16
17 from E5Gui.E5Application import e5App 17 from E5Gui.E5Application import e5App
18 18
19 import Preferences 19 import Preferences
20 import Utilities 20 import Utilities
149 exes.append(exe) 149 exes.append(exe)
150 except (WindowsError, OSError): # __IGNORE_WARNING__ 150 except (WindowsError, OSError): # __IGNORE_WARNING__
151 pass 151 pass
152 return exes 152 return exes
153 153
154 versionSuffixes = ["", "-32", "-64"]
154 for minorVersion in minorVersions: 155 for minorVersion in minorVersions:
155 versionStr = '{0}.{1}'.format(majorVersion, minorVersion) 156 for versionSuffix in versionSuffixes:
156 exePaths = getExePath( 157 versionStr = '{0}.{1}{2}'.format(majorVersion, minorVersion,
157 winreg.HKEY_CURRENT_USER, 158 versionSuffix)
158 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) 159 exePaths = getExePath(
159 if exePaths: 160 winreg.HKEY_CURRENT_USER,
161 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
160 for exePath in exePaths: 162 for exePath in exePaths:
161 executables.add(exePath) 163 executables.add(exePath)
162 164
163 exePaths = getExePath( 165 exePaths = getExePath(
164 winreg.HKEY_LOCAL_MACHINE, 166 winreg.HKEY_LOCAL_MACHINE,
165 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) 167 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr)
166 if exePaths:
167 for exePath in exePaths: 168 for exePath in exePaths:
168 executables.add(exePath) 169 executables.add(exePath)
169 170
170 # Even on Intel 64-bit machines it's 'AMD64' 171 # Even on Intel 64-bit machines it's 'AMD64'
171 if platform.machine() == 'AMD64': 172 if platform.machine() == 'AMD64':
172 exePaths = getExePath( 173 exePaths = getExePath(
173 winreg.HKEY_CURRENT_USER, 174 winreg.HKEY_CURRENT_USER,
174 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) 175 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
175 if exePaths:
176 for exePath in exePaths: 176 for exePath in exePaths:
177 executables.add(exePath) 177 executables.add(exePath)
178 178
179 exePath = getExePath( 179 exePath = getExePath(
180 winreg.HKEY_LOCAL_MACHINE, 180 winreg.HKEY_LOCAL_MACHINE,
181 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) 181 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr)
182 if exePaths:
183 for exePath in exePaths: 182 for exePath in exePaths:
184 executables.add(exePath) 183 executables.add(exePath)
185 else: 184 else:
186 # 185 #
187 # Linux, Unix ... 186 # Linux, Unix ...
210 exe = os.path.join(directory, pipScript + suffix) 209 exe = os.path.join(directory, pipScript + suffix)
211 if os.access(exe, os.X_OK): 210 if os.access(exe, os.X_OK):
212 exes.append(exe) 211 exes.append(exe)
213 212
214 # step 2: determine the Python variant 213 # step 2: determine the Python variant
215 if Utilities.isMacPlatform():
216 checkStrings = ["Python.framework/Versions/3".lower(),
217 "python3"]
218 else:
219 checkStrings = ["python3"]
220
221 _exePy2 = set() 214 _exePy2 = set()
222 _exePy3 = set() 215 _exePy3 = set()
216 versionArgs = ["-c", "import sys; print(sys.version_info[0])"]
223 for exe in exes: 217 for exe in exes:
224 try: 218 try:
225 f = open(exe, "r") 219 f = open(exe, "r")
226 line0 = f.readline() 220 line0 = f.readline()
227 for checkStr in checkStrings: 221 program = line0.replace("#!", "").strip()
228 if checkStr in line0.lower(): 222 process = QProcess()
229 _exePy3.add(exe) 223 process.start(program, versionArgs)
230 break 224 process.waitForFinished(5000)
225 # get a QByteArray of the output
226 versionBytes = process.readAllStandardOutput()
227 versionStr = str(versionBytes, encoding='utf-8').strip()
228 if versionStr == "3":
229 _exePy3.add(exe)
231 else: 230 else:
232 _exePy2.add(exe) 231 _exePy2.add(exe)
233 finally: 232 finally:
234 f.close() 233 f.close()
235 234

eric ide

mercurial